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

时间:2017-12-29 16:14:55

标签: bazel

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

cc_library(
    name = "xxx_util",
    visibility = ["//visibility:public",],
    ...
)

虽然大多数目标隐式公开,因为他们的BUILD文件具有指定的默认公开可见性,例如

package(default_visibility = ["//visibility:public"])

我需要一个包含所有此类目标的列表,以便在构建Bazel工作区后自动将其输出复制到某个位置。

我是Bazel的新手,无法弄清楚查询......

2 个答案:

答案 0 :(得分:4)

请看这个例子: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:*)'

更新(2017-01-04):@Curious询问是否要查询目标的有效可见性,即考虑default_visibility。 AFAIK Bazel不支持这一点;见issue #4388

答案 1 :(得分:1)

我认为先前的答案确实涵盖了针对可见性属性受限结果的属性查询。为了后代,我要补充一点,如果您只想从当前目录中查找所有目标,则可以执行以下操作:

bazel query ...