В Starlark, как мне сгенерировать файл, связанный с исполняемыми файлами?

В файле Starlark, который используется в Bazel, если я создаю файл с ctx.actions.declare_file()Есть ли какой-нибудь способ связать с ним зависимости /datafiles/runfiles? Например:

Я могу создать и записать в файл:

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,

Есть ли способ для этого? Если так, то как? Если нет, есть ли другой, лучший способ для меня, чтобы приблизиться к этому?

0 ответов

Другие вопросы по тегам