了解 Bazel“运行”操作的“输入”参数

Mic*_*ael 2 bazel bazel-rules

我正在编写一个简单的 Bazel 规则,该规则使用ctx.actions.run. 不幸的是,我很难理解运行inputs操作的参数。

该文档说inputs是“操作的输入文件的列表或深度集”。如果我的操作只运行一个可执行文件并传递一些文件路径作为其参数怎么办?假设我将参数指定为操作arguments的参数run。我还需要将这些文件路径添加到参数中吗inputs?为什么 ?

ahu*_*sky 5

inputs参数告诉 Bazel,当 Bazel 运行该操作时,哪些文件可供该操作的可执行文件使用。该参数很重要,原因如下:

  1. 它告诉 Bazel 需要运行哪些其他操作来生成给定操作的输入文件。如果你有Action1 <- Artifact <- Action2,其中Action2产生Artifact,并Action1作为Artifact输入,Bazel 知道Action2在 之前运行Action1

  2. 它告诉 Bazel 在操作沙箱中哪些文件可用。否则该操作将无法找到任何输入文件。

  3. 如果正在使用远程执行,它会告诉 Bazel 将哪些文件上传到远程执行工作线程。否则,该文件将无法在远程计算机上供操作读取。

arguments的参数告诉ctx.actions.runBazel 该操作的可执行文件的命令行是什么。如果您的可执行文件采用诸如--input和 之类的标志--output,您将使用arguments构建像 之类的命令行--input artifact1 --input artifact2 --output artifact3

请参阅此示例:https ://github.com/bazelbuild/examples/blob/master/rules/actions_run/execute.bzl