在Bazel中,有时需要依赖于生成的输出来构建目标。这可以通过使用genrule
规则或rules_proto_compile
规则来实现。以下是一个genrule
规则示例:
genrule(
name = "my_rule",
srcs = ["input_file.txt"],
outs = ["output_file.txt"],
cmd = "touch $@ && cp $< $@",
)
该规则将input_file.txt
复制到output_file.txt
文件中。现在,如果您希望某个目标依赖于output_file.txt
文件,可以使用data
属性来引用其输出:
cc_binary(
name = "my_binary",
srcs = ["main.cc"],
data = [":my_rule"],
)
这将确保在构建my_binary
目标时,Bazel先运行my_rule
规则来生成output_file.txt
文件,然后再将其作为data
属性的一部分传递给my_binary
目标。