如何在Bazel工作区中找到所有公开可见的目标

Cur*_*ous 5 bazel

我正在尝试查询具有公共可见性的Bazel目标列表。我们的某些Bazel目标已visibility明确指定,例如:

cc_library(
    name = "xxx_util",
    visibility = ["//visibility:public",],
    ...
)
Run Code Online (Sandbox Code Playgroud)

尽管大多数目标是隐式公共的,但是它们的BUILD文件指定了默认的公共可见性,例如

package(default_visibility = ["//visibility:public"])
Run Code Online (Sandbox Code Playgroud)

我需要所有这些目标的列表,以便在构建Bazel工作区之后可以将其输出自动复制到特定位置。

我是Bazel的新手,无法解决查询问题...

Rub*_*ons 19

我认为前面的答案确实涵盖了可见性属性受限结果的属性查询。对于后代,我想补充一点,如果您只是想从当前目录中查找所有目标,您可以这样做:

bazel query ...
Run Code Online (Sandbox Code Playgroud)

  • 我认为你的意思是:“bazel查询//...”至少这对我有用。 (4认同)

Lás*_*zló 8

看这个例子:https : //docs.bazel.build/versions/master/query-how-to.html#which-of-those-are-small-medium-large

你需要这样的东西:

bazel query 'attr(visibility, "//visibility:public", //path/to/package:*)'
Run Code Online (Sandbox Code Playgroud)

更新(2017-01-04):@Curious正在询问查询目标的有效可见性,即考虑default_visibility在内。AFAIK Bazel 不支持;见问题#4388

  • 或者干脆:bazel query 'attr(visibility, "//visibility:public", ...)' (2认同)
  • 啊,你需要有效的可见性!我不认为 bazel 查询可以告诉你。我提交了一个功能请求:https://github.com/bazelbuild/bazel/issues/4388。不幸的是,我们现在没有人专门从事 bazel 查询,所以这可能需要等待。 (2认同)