2017-12-29 7 views
1

public visibilityのBazelターゲットのリストを照会しようとしています。当社Bazel目標のいくつかは例えば、明示的に指定visibilityを持っている:Bazelワークスペースで公開されているすべてのターゲットを見つける方法

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

そのBUILDファイルは、例えば、指定されたデフォルトのパブリック可視性を持っているように、ほとんどの目標は、暗黙的にパブリックありながら、

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

私Bazelワークスペースが作成された後、私は、自動的に特定の場所に出力をコピーすることができるように、私は、そのようなすべてのターゲットのリストを必要とします。

私はBazelに新しいですし、クエリを把握することはできません...この例では

答えて

4

ルック:

bazel query 'attr(visibility, "//visibility:public", //path/to/package:*)' 

更新:https://docs.bazel.build/versions/master/query-how-to.html#which-of-those-are-small-medium-large

次のようなものを必要とします(2017-01-04):@Curiousは、ターゲットの効果的な可視性を照会すること、すなわちdefault_visibilityを考慮に入れていました。 AFAIK Bazelはそれをサポートしていません。 issue #4388を参照してください。

+2

または単に:bazel query 'attr(可視性、可視性:public "、...)' –

+0

**これは動作しますが、部分的にのみ**、明示的に指定されたvisibility属性を持つターゲット、例えば'visibility = [" // visibility:public "]、'。私の問題は、私たちの 'BUILD'ファイルの多くに、パッケージレベルの可視性が指定されていることです。このような 'BUILD'ファイルのすべてのターゲットが私のクエリに現れると期待しています...パッケージレベルの可視性がターゲットに伝播されていないように見えます(照会のために' 'package(default_visibility = [" visibility:public "])目的... – Curious

+1

ああ、効果的な可視性が必要です!私はバゼルのクエリはあなたにそれを伝えることができるとは思わない。私は機能要求を提出しました:https://github.com/bazelbuild/bazel/issues/4388。残念ながら、今はバゼルのクエリに取り組んでいる人がいないので、これはおそらく待つ必要があります。 –

関連する問題