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

时间:2018-09-11 17:33:44

标签: bazel

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

如果我有

```bazel_rule(
    name = "foo",
    srcs = ["foo.cpp"],
    attr_bar = "bar"
)```

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

1 个答案:

答案 0 :(得分:2)

这取决于您是否尝试从macroruleaspect读取属性。

简短答案:

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

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

一个方面可以直接通过ctx.rule.attr.<attr_name>the example here执行此操作)读取正在评估的规则的属性。