如何获取 Bazel 执行的命令
Posted
技术标签:
【中文标题】如何获取 Bazel 执行的命令【英文标题】:How do I get the commands executed by Bazel 【发布时间】:2015-11-29 14:09:32 【问题描述】:我想知道是否有办法让 Bazel 列出、输出、显示等所有可以从命令行执行的命令,这些命令在清理后的构建期间运行。我不在乎输出是在屏幕上还是在文件中等等。如有必要,我会将其按摩成可用的形式。
我在运行 Bazel 期间捕获了屏幕输出,这让我知道正在做什么,但是它没有给我一个可以在命令行上执行的命令。该命令必须包含所有命令选项,而不是显示变量。
如果这是不可能的,因为 Bazel 是开源的,在代码中是/是代表要运行的命令的行,以便我可以修改 Bazel 以输出可执行命令。
我知道 Bazel 中的查询命令,并使用它生成依赖关系图。如果这可以作为查询命令完成,那就更好了。
TLDR;
我的目标是在 Windows 上使用 Bazel 构建 TensorFlow。是的,我知道所有不这样做的问题和原因,并且已经通过虚拟机或 Docker 在 Windows 上成功安装了 TensorFlow。我确实从 Cygwin 开始尝试在 Windows 上构建 Bazel,但这开始失控,因为我习惯于使用软件包进行安装,而 Cygwin 不适合使用软件包,所以我开始尝试手动构建 Bazel这变成了一个泥潭。因此,我现在尝试通过复制 Bazel 在 Linux 上构建 TensorFlow 所做的工作,在 Windows 上手动构建 TensorFlow。
【问题讨论】:
您是否考虑或尝试使用 WSL 代替 Cygwin 或 Docker 或 VM? @BrianBulkowski 当这个问题在 2015 年提出时,我不相信 WSL 是公开的。我确实在 beta 版本的早期使用了 WSL,即使那样它也没有访问 GPU,所以在提出问题时我不会考虑 WSL 1。虽然我仍然密切关注 TensorFlow 的使用,但目前我并没有积极使用 TensorFlow,而是将其保存在我的工具箱中。 :) 幸运的是,我当时所做的事情的细节在这个答案中被公开了,但它也是多年前完成的。虽然我最近没有安装 TensorFlow,但我现在先尝试标准安装。 幸运的是,我当时所做的事情的详细信息已在 answer 中公开,但它也是多年前完成的。虽然我最近没有安装 TensorFlow,但我现在先尝试标准安装。 @BrianBulkowski 发现 Aerospike,我喜欢引擎概念,但 NoSQL 数据库公司的名字很奇怪,加入论坛,:) 如果数字合理,Elon 会考虑使用 Aerospike 引擎。 【参考方案1】:你是对的,你可以使用-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 支持),尽管可能需要一段时间。
【讨论】:
【参考方案2】:(免责声明:此解决方案不打印当前得到执行的命令,但将得到或得到 执行。)
我会使用aquery(action graph query)(忘记“graph”):
bazel aquery //foo
优点:
速度非常快,因为它在不执行构建的情况下打印操作。 这是一个查询。它没有副作用。 您无需先发送bazel clean
即可了解已构建库的构建步骤。
它会打印有关您请求的特定构建步骤的信息。它确实不打印依赖项所需的所有构建命令。
【讨论】:
以上是关于如何获取 Bazel 执行的命令的主要内容,如果未能解决你的问题,请参考以下文章
如何获取使用 Testcontainers 执行的命令退出代码?