获取给定 bazel 目标的特定属性的值

Bri*_*nes 2 bazel

我确信这在某处有记录,但无法在任何地方找到答案。

如果我有:

```bazel_rule(
    name = "foo",
    srcs = ["foo.cpp"],
    attr_bar = "bar"
)```
Run Code Online (Sandbox Code Playgroud)

如果我//src:foo在 Starlark (.bzl) 文件中引用了此规则 ( ),我如何查询目标以获取特定属性的值。例如,get_attribute("//src:foo", "attr_bar")在这个例子中应该返回“bar”。

ahu*_*sky 6

这取决于您是否尝试从规则方面读取属性。

简短的答案:

宏无法读取目标的属性(粗略地说,宏在构建文件加载时评估,属性在分析时评估)。您可以执行一些操作,例如接收您关心的属性并bazel_rule在宏中创建规则(在您的示例中),以便宏具有属性值,但这通常很快就会变得混乱且难以遵循。

Starlark 规则也不能直接从依赖项读取属性值(当然,它可以读取自己的属性)。您感兴趣的规则(bazel_rule此处)必须将信息放入提供程序中,Starlark 规则从其依赖项中读取提供程序。

一个方面可以直接通过读取规则的属性ctx.rule.attr.<attr_name>这里的示例就是这样做的)。