在Bazel中使用的Starlark文件中,如果我使用ctx.actions.declare_file()
创建文件,是否有某种方法可以将依赖项/数据文件/运行文件与其相关联?例如:
我可以创建并写入文件:
script_file = ctx.actions.declare_file("myscript.sh")
ctx.actions.write(
script_file,
"echo hello from myscript.sh\n",
is_executable = True
)
...,然后我可以根据需要使用script_file
。例如。在ctx.actions.run
或ctx.actions.run_shell
中。
现在假设myscript.sh
取决于data.txt
:
data_file = ctx.actions.declare_file("data.txt")
ctx.actions.write(data_file, "hello from data.txt\n")
script_file = ctx.actions.declare_file("myscript.sh")
ctx.actions.write(
script_file,
"cat {}\n".format(data_file.path),
is_executable = True
)
然后我可以运行它(在此示例中,调用此规则的规则具有名为“ main”的输出):
ctx.actions.run_shell(
tools = [script_file, data_file],
outputs = [ctx.outputs.main],
command = "{} > {}".format(script_file.path, ctx.outputs.main.path)
)
好的。但是,实际上必须在script_file
数组中同时指定data_file
和tools
是很麻烦的。我只想指定script_file
,并自动将data_file
作为script_file
的运行文件。
有办法吗?如果是这样,怎么办?如果没有,我还有其他更好的方法来解决这个问题吗?