23

我想知道是否有办法让 Bazel 列出、输出、显示等所有可以从命令行执行的命令,这些命令在清理后的构建期间运行。我不在乎输出是在屏幕上还是在文件中等。如有必要,我会将其按摩成可用的形式。

我在运行 Bazel 期间捕获了屏幕输出,这让我知道正在做什么,但是它没有给我可以在命令行上执行的命令。该命令必须包括所有命令选项,而不是显示变量。

如果这是不可能的,因为 Bazel 是开源的,在代码中是/是代表要运行的命令的行,以便我可以修改 Bazel 以输出可执行命令。

我知道 Bazel 中的查询命令,并使用它生成依赖关系图。如果这可以作为查询命令完成,那就更好了。

TLDR;

我的目标是在 Windows 上使用 Bazel 构建 TensorFlow。是的,我知道所有不这样做的问题和原因,并且已经通过虚拟机或 Docker 在 Windows 上成功安装了 TensorFlow。我确实从 Cygwin 开始尝试在 Windows 上构建 Bazel,但这开始失控,因为我习惯于使用软件包进行安装,而 Cygwin 不适合使用软件包,所以我开始尝试手动构建 Bazel这变成了一个泥潭。因此,我现在尝试通过复制 Bazel 在 Linux 上构建 TensorFlow 所做的工作,在 Windows 上手动构建 TensorFlow。

4

2 回答 2

25

你是对的,你可以使用-s( --subcommands) 选项:

bazel build -s //foo

请参阅https://docs.bazel.build/versions/master/user-manual.html#flag--subcommands

对于您的用例,您可能希望将输出重定向到文件,然后将任何库/二进制路径全局替换为 Windows 等效项。

您可能想要跟踪https://github.com/bazelbuild/bazel/issues/276(Windows支持),尽管可能需要一段时间。

于 2015-11-30T17:41:55.053 回答
4

(免责声明:此解决方案不打印当前执行的命令,而是打印将执行或执行的命令。)

我会使用查询动作图查询)(忘记“图”):

bazel aquery //foo

优点:

  • 它非常快,因为它在不执行构建的情况下打印操作。
  • 这是一个查询。它没有副作用。
  • 您不必执行bazel clean之前的操作即可了解已构建库的构建步骤。
  • 它打印有关您请求的特定构建步骤的信息。它不会打印依赖项所需的所有构建命令。
于 2020-10-05T12:46:56.003 回答