要让genrule的输出可用于另一个规则,可以使用Bazel的output_to_bind
属性来实现。下面是一个示例解决方法:
假设我们有一个genrule规则,它生成一个名为output.txt
的文件:
genrule(
name = "generate_output",
srcs = [],
outs = ["output.txt"],
cmd = "echo 'Hello, World!' > $@",
)
现在,我们想要将output.txt
的内容传递给另一个规则,可以使用output_to_bind
属性。首先,我们需要定义一个genrule
规则来读取output.txt
的内容并将其输出到一个新文件中:
genrule(
name = "read_output",
srcs = [],
outs = ["output_content.txt"],
cmd = "cat $(location //:output.txt) > $@",
output_to_bind = {"output_content": ":output_content.txt"},
)
在上面的示例中,我们使用output_to_bind
属性将output_content.txt
文件绑定到目标规则的output_content
标签上。现在,我们可以在其他规则中使用output_content
来引用这个文件:
cc_binary(
name = "my_binary",
srcs = ["main.cc"],
deps = [":read_output"],
data = [":output_content"],
# 其他属性...
)
在上述示例中,我们将:read_output
作为一个依赖项传递给:my_binary
规则,并将:output_content
标签添加到data
属性中。这样,:my_binary
规则就可以访问output_content.txt
文件了。
请注意,output_to_bind
属性的值应该是一个字典,其中键是绑定的标签名称,值是生成的文件的相对路径。