如何根据构建设置使用文件名

How to use a filename based on a build setting

我的构建设置如下:

string_flag(
    name = "version",
    build_setting_default = "0.1")

我想用它来创建一个文件,例如:

ctx.actions.run_shell(
    outputs = ["report-%s.csv" % (version)],
    inputs = ctx.files.inputs,
    command = "$(location //build:report-generator.sh) 2>&1"
)

但是,我收到以下错误:

Error in run_shell: at index 0 of outputs, got element of type string, want File

这是文件的文档:https://docs.bazel.build/versions/main/skylark/lib/File.html

created during the analysis phase

所以我的问题是,如何在分析阶段获取构建设置的值?

如错误消息所述,run_shelloutputs 参数需要一个 File 对象列表而不是字符串。一般通过declaring an output in the rule class definition or using the ctx.actions.declare_file方法得到一个合适的输出File对象。