Иногда в моих правилах Bazel мне нужно запустить инструмент, который производит кучу файлов, но записывает их в выходной каталог, и путь к каталогу должен использоваться в качестве аргумента. Таким образом, я получил следующий шаблон:
out_dir = "{}_out".format(ctx.label)
out_files = []
for file in ctx.files.srcs:
file_path = # ... construct file path
o = ctx.actions.declare_file("{}/{}".format(out_dir, file_path))
out_files.append(o)
# Now we need to fetch first file and strip out file path part
out = out_files[0].path
out = out[0:(out.find(out_dir) + len(out_dir)]
Но он кажется очень многословным и уродливым, и я не могу найти хорошего способа построить этот путь с помощью атрибутов правила или чего-то доступного на этапе анализа. Есть ли простой способ добиться этого?