Bazel-任何给定规则使用哪些提供者的最佳文档?

Bazel-任何给定规则使用哪些提供者的最佳文档?,bazel,Bazel,我正在编写一个自定义规则,该规则从cc_库、cc_二进制、apple_静态_库以及其他一些特定于平台的规则中获取输入。我想在自定义规则的实现函数中通过引用ctx.attr.foo查看提供给我的每个API 这里有一个提供者列表,但没有说明哪些规则正在使用它们 查看这些规则为我提供的内容是否有最佳做法,或者是否需要检查每个规则的源代码?您可以使用获取给定目标的提供者列表。类似这样的内容有助于调试: def\u print\u attrs\u impl(ctx): 对于ctx.attr.targets

我正在编写一个自定义规则,该规则从
cc_库
cc_二进制
apple_静态_库
以及其他一些特定于平台的规则中获取输入。我想在自定义规则的实现函数中通过引用
ctx.attr.foo
查看提供给我的每个API

这里有一个提供者列表,但没有说明哪些规则正在使用它们


查看这些规则为我提供的内容是否有最佳做法,或者是否需要检查每个规则的源代码?

您可以使用获取给定目标的提供者列表。类似这样的内容有助于调试:

def\u print\u attrs\u impl(ctx):
对于ctx.attr.targets中的目标:
打印(“%s:%s%”(target.label,dir(target)))
从您正在开发的规则内部打印通常也很有帮助,以验证目标实际上是您所期望的


您还可以将
dir
应用于提供者本身,以查看它们有哪些字段。

在我的实验中,“dir”列出了对象属性,但没有列出提供者。例如,对于cc_库,label dir给了我“actions”、“data_runfiles”、“default_runfiles”、“files”、“files_to_run”、“label”、“output_groups”。但它不允许我看到我可以使用方括号语法查询OutputGroupInfo或CcInfo提供程序。如果我知道需要哪些提供者,我可以测试它的存在性:If CcInfo in obj:cc_info=obj[CcInfo],但是如果我不知道需要什么(或者想列出对象中所有可用的提供者),我看不到不使用方面就可以实现的方法。下面是如何检查提供者存在性的示例代码: