【问题标题】:How to solidify the order in which Bazel builds objects如何巩固 Bazel 构建对象的顺序
【发布时间】:2018-01-29 19:19:52
【问题描述】:

我正在使用 Google Bazel 构建程序。当我进行影响多个文件的大更改并重建时,Bazel 随机选择一个文件来显示错误消息。这会导致大量编辑流失,而且我经常失去上下文。我修复了一个文件中的一个编译错误,然后重新构建,但我看不到修复是否有效,因为 Bazel 决定在其他文件上失败。

特别是如果我有一个目标

cc_binary(name='foo',
          srcs=['bar.cc', 'qux.cc'])

然后我运行$ bazel build :foo 然后我将收到bar.cc 的错误消息。如果我再次运行而不进行任何更改,那么我将收到(可能)错误消息。对于qux.cc。我不知道是什么支配了随机性。或许我这种卑微的凡人不应该知道?

有没有办法巩固 Bazel 构建文件的顺序,这样我就不必在文件之间“物理上”和精神上跳跃?重新定位心理环境需要时间,而在修复愚蠢的错别字时,这些时间完全被浪费了。

我喜欢make 这样的东西,你可以说$ make foo.o。然后我可以修复foo.cc,并且只有在它构建之后然后才能转到bar.cc。 Alphabet Google 是否支持这种高级方法?

【问题讨论】:

  • 我使用了--jobs 标志来帮助解决这个问题,@mhlopko 在下面也提到了这一点。文档说 The number of concurrent jobs to run. 0 means build sequentially. 所以我建议值为 0。

标签: c++ bazel


【解决方案1】:

尝试使用--keep_going

这将告诉 bazel 不要在它发现的第一个错误处停止,而是尝试构建它可以构建的所有内容。

【讨论】:

  • 添加,没有--keep_going,构建将在遇到第一个错误时失败。由于 Bazel 以并发方式遍历依赖关系图,因此在不探索整个图的情况下很难提供确定性的错误跟踪。这就是--keep_going 将在这里工作的原因。
  • 您也可以使用 --jobs=1 运行以使输出不那么“活泼”。
猜你喜欢
  • 2016-07-18
  • 2012-12-23
  • 1970-01-01
  • 1970-01-01
  • 2020-04-29
  • 1970-01-01
  • 2018-05-07
  • 2017-03-12
  • 1970-01-01
相关资源
最近更新 更多