问题描述
我希望能够在 Bazel BUILD 文件中执行以下操作:
alpha(
name = "hello world",color = "blue"
)
beta(
name = "hello again"
)
其中 alpha
和 beta
是自定义规则。我希望 beta
能够访问 color
规则的 alpha
属性,无需添加标签属性。在 Bazel 查询中,我可以这样做:
bazel query 'kind(beta,siblings(kind(alpha,//...)))'
它给了我与 beta
并排的 alpha
。我可以在 beta
规则的实现函数中以某种方式实现相同的功能吗?
def _beta_rule_impl(ctx):
# This does not exist,I wish it did: ctx.siblings(kind='alpha')
我见过用这样的标签完成的
beta(
name = "hello again",alpha_link = ":hello world" # explicitly linking
)
解决方法
问题的表述方式,答案是否定的。这是不可能的。
Bazel 的设计理念是明确目标依赖性。 Providers mechanism 旨在在分析阶段提供对依赖关系图信息的访问。
很难说实际用例是什么。使用 Aspects 可能是答案。