如何列出bazel规则的输出组?

如何列出bazel规则的输出组?,bazel,Bazel,发件人: cc_库生成多个输出,这些输出由输出组分隔。如果只想获取.so输出,可以将文件组与动态库输出组一起使用 我在哪里可以找到由cc_library生成的所有输出组的列表?更一般地说,如何列出bazel规则的所有输出组?这不是文档的替代品,但可以使用以下方法获得目标的输出组: defs.bzl: def _output_group_query_aspect_impl(target, ctx): for og in target.output_groups: print("outp

发件人:

cc_库
生成多个输出,这些输出由输出组分隔。如果只想获取.so输出,可以将
文件组
动态库
输出组一起使用


我在哪里可以找到由
cc_library
生成的所有输出组的列表?更一般地说,如何列出bazel规则的所有输出组?

这不是文档的替代品,但可以使用以下方法获得目标的输出组:

defs.bzl

def _output_group_query_aspect_impl(target, ctx):
  for og in target.output_groups:
    print("output group " + str(og) + ": " + str(getattr(target.output_groups, og)))
  return []

output_group_query_aspect = aspect(
    implementation = _output_group_query_aspect_impl,
)
然后在命令行上:

bazel build --nobuild Foo --aspects=//:defs.bzl%output_group_query_aspect
--nobuild
只运行分析阶段,如果不需要,则避免运行执行阶段)

对于
java\u二进制文件
,返回例如:

DEBUG: defs.bzl:3:5: output group _hidden_top_level_INTERNAL_: depset([<generated file _middlemen/Foo-runfiles>])
DEBUG: defs.bzl:3:5: output group _source_jars: depset([<generated file Foo-src.jar>])
DEBUG: defs.bzl:3:5: output group compilation_outputs: depset([<generated file Foo.jar>])
DEBUG:defs.bzl:3:5:output group\u hidden\u top\u level\u INTERNAL\u:depset([])
DEBUG:defs.bzl:3:5:output group\u source\u jars:depset([])
调试:defs.bzl:3:5:输出组编译\u输出:depset([])
在下一个Bazel版本中(3.7之后),或使用Bazel@HEAD从今天起,您可以使用
cquery--output=starlark
providers()
函数来执行以下操作:

$ bazel-dev cquery //:java-maven \ 
  --output=starlark \ 
  --starlark:expr="[p for p in providers(target)]"
["InstrumentedFilesInfo", "JavaGenJarsProvider", "JavaInfo", "JavaRuntimeClasspathProvider", "FileProvider", "FilesToRunProvider", "OutputGroupInfo"]

对于3.7.1,我得到以下信息:错误:执行分析后查询时出错:无效——starlark:expr:name“providers”未定义3.7.1只是3.7的一个补丁版本,仅在4.0(当前作为候选版本)或更高版本中可用。