我正在编写一个简单的 Bazel 规则,它使用ctx.actions.run
. 不幸的是,我很难理解运行动作inputs
的参数。
文档说inputs
是“动作输入文件的列表或 depset”。如果我的操作只是运行一个可执行文件并传递一些文件路径作为其参数怎么办?假设我将参数指定为操作的arguments
参数run
。我还需要将这些文件路径添加到inputs
参数中吗?为什么 ?
我正在编写一个简单的 Bazel 规则,它使用ctx.actions.run
. 不幸的是,我很难理解运行动作inputs
的参数。
文档说inputs
是“动作输入文件的列表或 depset”。如果我的操作只是运行一个可执行文件并传递一些文件路径作为其参数怎么办?假设我将参数指定为操作的arguments
参数run
。我还需要将这些文件路径添加到inputs
参数中吗?为什么 ?
该inputs
参数告诉 Bazel 在 Bazel 运行操作时哪些文件可用于操作的可执行文件。这个参数很重要,有几个原因:
它告诉 Bazel 需要运行哪些其他操作来为给定操作生成输入文件。如果你有, Action1 <- Artifact <- Action2
whereAction2
产生Artifact
并作为输入,Bazel 知道在之前运行。Action1
Artifact
Action2
Action1
它告诉 Bazel 在操作沙箱中可以使用哪些文件。否则,该操作将无法找到其任何输入文件。
如果正在使用远程执行,它会告诉 Bazel 要将哪些文件上传到远程执行工作者。否则,该文件将无法在远程计算机上供操作读取。
的arguments
参数ctx.actions.run
告诉 Bazel 操作的可执行文件的命令行是什么。--input
如果您的可执行文件采用and之类的标志--output
,您将使用arguments
构建一个命令行,例如--input artifact1 --input artifact2 --output artifact3
.
请参阅此示例:https ://github.com/bazelbuild/examples/blob/master/rules/actions_run/execute.bzl