如何获取 Bazel 执行的命令

How do I get the commands executed by Bazel

我想知道是否有办法让 Bazel 列出、输出、显示等所有可以从命令行执行的命令 运行干净的。我不在乎输出是在屏幕上,在文件中等等。如果需要,我会把它整理成可用的形式。

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

如果这不可能,因为 Bazel 是开源的,在代码中 is/are 表示命令的行是 运行 这样我就可以修改 Bazel 以输出可执行命令.

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

TLDR;

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

上构建 TensorFlow 所做的工作,在 Windows 上手动构建 TensorFlow

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

bazel build -s //foo

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

对于您的用例,您可能希望将输出重定向到一个文件,然后将任何 library/binary 路径全局替换为 Windows 等价物。

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

(免责声明:此解决方案 不会 打印 当前得到 执行的命令,但 将得到的命令 执行了 。)

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

bazel aquery //foo

优点:

  • 速度非常快,因为它会在不执行构建的情况下打印操作。
  • 这是一个查询。它没有副作用。
  • 您之前不必执行 bazel clean 即可找出已构建库的构建步骤。
  • 它打印有关您请求的特定 构建步骤的信息。它不会打印依赖项所需的所有构建命令。