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],但是如果我不知道需要什么(或者想列出对象中所有可用的提供者),我看不到不使用方面就可以实现的方法。下面是如何检查提供者存在性的示例代码: