我确定这是在某处记录的,但无法在任何地方找到答案。
如果我有
```bazel_rule(
name = "foo",
srcs = ["foo.cpp"],
attr_bar = "bar"
)```
如果我在Starlark(.bzl)文件中引用了此规则(//src:foo
),则如何查询目标以获取特定属性的值。例如在此示例中,get_attribute("//src:foo", "attr_bar")
应该返回“ bar”。
答案 0 :(得分:2)
这取决于您是否尝试从macro,rule或aspect读取属性。
简短答案:
宏无法读取目标的属性(大致来说,宏是在构建文件加载时评估的,而属性是在分析时评估的)。您可以执行一些操作,例如获取您关心的属性并在宏内创建规则(在示例中为bazel_rule
),以便宏具有属性值,但是通常很快就会变得混乱且难以遵循。
Starlark规则也不能直接从依赖项中读取属性值(当然,它可以读取自己的属性)。您感兴趣的规则(此处为bazel_rule
)必须将信息放入provider中,Starlark规则会从其依赖项中读取提供程序。
一个方面可以直接通过ctx.rule.attr.<attr_name>
(the example here执行此操作)读取正在评估的规则的属性。