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

时间:2020-04-16 14:23:21

标签: bazel

来自https://stackoverflow.com/a/59455700/6162120

cc_library产生多个输出,这些输出由输出组分隔。如果只想获取.so输出,则可以将filegroupdynamic_library输出组一起使用。

在哪里可以找到cc_library产生的所有输出组的列表?更一般而言,如何列出bazel规则的所有输出组?

2 个答案:

答案 0 :(得分:2)

这不能代替文档,但是可以使用aspect获取目标的输出组:

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_binary,它返回例如:

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>])

答案 1 :(得分:1)

在下一个Bazel版本(3.7之后)中,或者从今天开始使用Bazel @ HEAD,您可以使用 "scripts": { "start": "react-scripts start", "build": "react-scripts build && npm run copy", "test": "react-scripts test", "eject": "react-scripts eject", "copy": "cp public/.htaccess dist" }, cquery --output=starlark函数来做到这一点:

providers()