在Starlark中,如何生成具有关联的运行文件的文件?

时间:2019-03-27 23:12:22

标签: bazel starlark

在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.runctx.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_filetools是很麻烦的。我只想指定script_file,并自动将data_file作为script_file的运行文件。

有办法吗?如果是这样,怎么办?如果没有,我还有其他更好的方法来解决这个问题吗?

0 个答案:

没有答案