目次
パッケージ
package(default_deprecation, default_testonly, default_visibility, features)
この関数は、後続のすべてのルールに適用されるメタデータを パッケージ化されています。パッケージ(BUILD ファイル)内で最大 1 回使用されます。
package() 関数は、モジュールの先頭にあるすべての load() ステートメントの直後に 表示されます。
引数
属性 | 説明 |
---|---|
default_visibility |
このパッケージのルールのデフォルトの公開設定。 このパッケージ内のすべてのルールは、このパッケージに含まれる公開設定に
属性( |
default_deprecation |
デフォルトの を設定します。
このパッケージ内のすべてのルールの |
default_testonly |
デフォルトの を設定します。
このパッケージ内のすべてのルールの
|
features |
この BUILD ファイルのセマンティクスに影響するさまざまなフラグを設定します。 この機能は主に、ビルドシステムの開発者が なんらかの特別な処理が必要なタグ パッケージをビルドします。次の場合以外は使用しないでください。 明示的にリクエストされた処理はありません。 |
例
以下の宣言では、このパッケージのルールが パッケージのメンバーにのみ表示されます グループ//foo:target
。個別の公開設定宣言
存在する場合は、この指定をオーバーライドします。
package(default_visibility = ["//foo:target"])
package_group
package_group(name, packages, includes)
この関数は、一連のパッケージを定義します。
セットにラベルを関連付けますラベルは次の場所から参照できます:
visibility
属性。
パッケージ グループは、主に公開設定に使用されます。一般公開されている ターゲットはソースツリー内のすべてのパッケージから参照できます。プライベートで 可視ターゲットは、自身のパッケージ内でのみ参照できます(サブパッケージ内では参照できません)。 これらの極端な間で、ターゲットは自身のパッケージへのアクセスに加えて、 1 つ以上のパッケージ グループで記述されるパッケージの ID です。詳細については、 説明については、このモジュールの 可視性 属性です。
グループに含まれるのは、
packages
属性、またはすでに他 1 つの属性に含まれています
includes
属性で指定されたパッケージ グループ。
パッケージ グループは技術的にはターゲットですが、ルールでは作成されず、 可視性も保護されません
引数
属性 | 説明 |
---|---|
name |
このターゲットの一意の名前。 |
packages |
0 個以上のパッケージ仕様のリスト。 各パッケージ仕様の文字列には、次のいずれかを指定できます。 フォーム:
さらに、最初の 2 種類のパッケージ仕様は、
否定することを示す パッケージ グループにパッケージのうち、少なくとも 1 つに一致するパッケージが含まれている
肯定的な仕様で、否定的な仕様はない
たとえば、値 公開設定のほか、バージョン 4 に 外部にデプロイされます この属性がない場合は、
空のリストがあります。これは、次の要素を含むリストに
注: Bazel 6.0 より前のバージョンでは、 注: Bazel 6.0 より前では、この属性が次のようにシリアル化されています。
|
includes |
これに含まれる他のパッケージ グループ。 この属性のラベルは他のパッケージ グループを参照する必要があります。
参照先のパッケージ グループ内のパッケージも、このパッケージに含まれます。
含まれています。パッケージ グループの場合、これは推移的です。
negated package 仕様と一緒に使用する場合、 各グループのパッケージのセットが個別に計算され、 複数の結果が結合されますつまり グループ内の仕様に影響を与えない場合、 クリックします。 |
例
次の package_group
宣言では、
「トロピカル」というラベルの含まれることになります。
package_group( name = "tropical", packages = [ "//fruits/mango", "//fruits/orange", "//fruits/papaya/...", ], )
次の宣言では、架空のインスタンスのパッケージ グループを指定します。 アプリケーション:
package_group( name = "fooapp", includes = [ ":controller", ":model", ":view", ], ) package_group( name = "model", packages = ["//fooapp/database"], ) package_group( name = "view", packages = [ "//fooapp/swingui", "//fooapp/webui", ], ) package_group( name = "controller", packages = ["//fooapp/algorithm"], )
exports_files
exports_files([label, ...], visibility, licenses)
exports_files()
は、オブジェクトに属するファイルのリストを指定します。
他のパッケージにエクスポートされます。
パッケージの BUILD ファイルは、所属先のソースファイルを直接参照することしかできません。
明示的にエクスポートされている場合は、
exports_files()
ステートメント。詳細を見る:
ファイルの可視性に優れています。
従来の動作として、ルールへの入力として記述されたファイルもエクスポートされます。
デフォルトの表示状態のままで、
--incompatible_no_implicit_file_export
反転していますただし、この動作に依存するべきではありません。また、
Google Workspace から
引数
この引数は、現在のパッケージ内のファイルの名前のリストです。
可視性の宣言も指定できます。この場合、ファイルはすべての Pod に
そのターゲットに公開されます。公開設定が指定されていない場合、
すべてのパッケージに表示されます。パッケージのデフォルトの公開設定が
package
で指定
使用します。ライセンス
指定することもできます。
例
次の例では、golden.txt
、
テキスト ファイルが test_data
パッケージから提供されるため、
パッケージで、たとえば data
属性内で使用できます。
含まれています。
# from //test_data/BUILD exports_files(["golden.txt"])
glob
glob(include, exclude=[], exclude_directories=1, allow_empty=True)
glob は、特定のパスパターンに一致するすべてのファイルを検索するヘルパー関数です。 このメソッドは、パスの新しい変更可能な並べ替え済みリストを返します。Glob はファイルのみを検索 検索され、ソースファイルのみが検索されます(生成されたファイルや できます。
ソースファイルのラベルは、ファイルのパッケージ相対 URL が結果に含まれる場合
path は include
パターンのいずれかに一致し、
exclude
パターン。
include
リストと exclude
リストにパスパターンが含まれている
現在のパッケージに関連するものが出力されます。各パターンは、1 つまたは複数の
分割します通常の Unix パスと同様に、これらのセグメントは
/
。セグメントにはワイルドカードとして *
を含めることができます。これは、次と一致します。
パスセグメント内のすべての部分文字列(空の部分文字列も含む)。ただし、
ディレクトリ区切り文字 /
。このワイルドカードは複数回使用できます
1 つの経路セグメント内に収めますまた、**
ワイルドカードは、
0 個以上の完全なパスセグメントを指定できますが、スタンドアロンのものとして宣言する必要があります
作成します
foo/bar.txt
は、foo/bar.txt
ファイルと完全に一致します。 このパッケージ内foo/*.txt
は、foo/
ディレクトリ内のすべてのファイルに一致します。 ファイルの末尾が.txt
(foo/
がサブパッケージの場合を除く)foo/a*.htm*
はfoo/
内のすべてのファイルに一致します。a
で始まり、その後は任意の文字列( 空)、次に.htm
を持ち、別の任意の文字列で終わります。 (foo/axx.htm
、foo/a.html
など)またはfoo/axxx.html
**/a.txt
は、すべてのa.txt
ファイルをすべて このパッケージのサブディレクトリ**/bar/**/*.txt
は、すべての.txt
ファイルをすべて 生成されたパスに少なくとも 1 つのディレクトリがある場合、このパッケージのbar
、xxx/bar/yyy/zzz/a.txt
やbar/a.txt
(**
はゼロにも一致する またはbar/zzz/a.txt
**
は、このディレクトリのすべてのサブディレクトリ内のすべてのファイルに一致します。 荷物foo**/a.txt
は無効なパターンです。**
は セグメントとして独立していて
exclude_directories
引数が有効(1 に設定)の場合、
結果では省略されます(デフォルトは 1)。
allow_empty
引数が False
に設定されている場合は、
結果が次の場合は、glob
関数でエラーが発生します。
空のリストです。
いくつかの重要な制限事項と注意点があります。
-
glob()
は BUILD ファイルの評価中に実行されるため、glob()
はソースツリー内のファイルのみを照合し、照合しません。 表示できます。両方を必要とするターゲットを作成する場合 使用する場合は、生成されたファイルを明示的にリストし、 glob に出力します。例をご覧ください。:mylib
と:gen_java_srcs
に置き換えます。 -
ルールの名前がソースファイルと同じ名前の場合、ルールは 「シャドウ」表示されます。
これを理解するために、
glob()
はリストを返すことを覚えておいてください。 そのため、他のルールでglob()
を使用すると、属性(例:srcs = glob(["*.cc"])
など)は、 明示的に照合することもできます。たとえば、glob()
の結果が["Foo.java", "bar/Baz.java"]
というルールですが、 「Foo.java」というパッケージです。(許可されていますが、Bazel では警告が表示されます)。glob()
のコンシューマは「Foo.java」を使用します。ルール (その出力)を「Foo.java」ではなく、表示されます。詳しくは、 GitHub 問題 #10395 をご覧ください。 - glob は、サブディレクトリ内のファイルと一致する場合があります。サブディレクトリ名 ワイルドカードを使用できます。しかし...
-
ラベルはパッケージの境界を越えることはできず、glob はこれを許可する サブパッケージ内のファイルと一致しない。
たとえば、パッケージ内の glob 式
**/*.cc
です。 次の場合、x
にx/y/z.cc
は含まれません。x/y
はパッケージとして存在します(またはx/y/BUILD
、または package-path の別の場所)。この glob 式の結果が実際に BUILD ファイルが存在することを意味します。つまり、同じ glob 式が 呼び出されたパッケージがない場合はx/y/z.cc
を含めます。x/y
であるか、 --deleted_packages 設定されます。 - 上記の制限は、すべての glob 式に適用されます。 使用できます。
-
ファイル名が
.
で始まる非表示ファイルは、次により完全に一致します。**
と*
の両方のワイルドカードを使用できます。隠しファイルとの照合を行う場合 複合パターンがある場合、パターンは.
で始まる必要があります。たとえば*
と.*.txt
は.foo.txt
と一致しますが、*.txt
と一致します。 できません。 隠しディレクトリも同様に照合されます。隠しディレクトリ 入力として不要なファイルが含まれていることがあり、 メモリ消費量を削減できます除外する 非表示のディレクトリを「exclude」list 引数。 -
「**」ワイルドカードには角かっこが 1 つあります。すなわち、
"**"
がパッケージのディレクトリ パスと一致しません。つまり、 たとえば、「glob(["**"], exclude_directories = 0)
」はすべてのファイルに一致します 現在のパッケージのディレクトリに推移的 (ただし、サブパッケージのディレクトリには移動しません。前のセクションを参照してください)。 注記を参照)。
通常は、適切な拡張子(*.html など)を指定するようにしてください。 を使用します。より明示的な名前では、 自己記録であり、誤ってバックアップと照合したり emacs/vi/...の自動保存が可能です
ビルドルールを記述するときに、glob の要素を列挙できます。この たとえば、入力ごとに個別のルールを生成できます。詳しくは、 後述の拡張 glob の例をご覧ください。
glob の例
このディレクトリ内のすべての Java ファイルからビルドされた Java ライブラリを作成します。
:gen_java_srcs
ルールによって生成されたすべてのファイルが含まれます。
java_library( name = "mylib", srcs = glob(["*.java"]) + [":gen_java_srcs"], deps = "...", ) genrule( name = "gen_java_srcs", outs = [ "Foo.java", "Bar.java", ], ... )
すべての txt ファイルを testdata ディレクトリに含めます(experiment.txt を除く)。 testdata のサブディレクトリにあるファイルは含まれません。条件 それらのファイルを含める場合は、再帰 glob(**)を使用します。
sh_test( name = "mytest", srcs = ["mytest.sh"], data = glob( ["testdata/*.txt"], exclude = ["testdata/experimental.txt"], ), )
再帰的 Glob の例
testdata ディレクトリ内のすべての txt ファイルと、 そのサブディレクトリ(およびそのサブディレクトリ)の集合です。 BUILD ファイルを含むサブディレクトリは無視されます。(制限事項を確認) および上記の注意事項をご覧ください)。
sh_test( name = "mytest", srcs = ["mytest.sh"], data = glob(["testdata/**/*.txt"]), )
このディレクトリ内のすべての Java ファイルと、 test という名前のディレクトリを含むパスは除きます。 ビルドを削減できるため、このパターンはできるだけ避けてください。 インクリメンタリティが高まり、ビルド時間が長くなります。
java_library( name = "mylib", srcs = glob( ["**/*.java"], exclude = ["**/testing/**"], ), )
拡張された Glob の例
現在のディレクトリに *_test.cc の genrule を個別に作成する ファイル内の行数をカウントします。
# Conveniently, the build language supports list comprehensions. [genrule( name = "count_lines_" + f[:-3], # strip ".cc" srcs = [f], outs = ["%s-linecount.txt" % f[:-3]], cmd = "wc -l $< >$@", ) for f in glob(["*_test.cc"])]
上記の BUILD ファイルがパッケージ //foo にあり、このパッケージに 3 つの
見つかった後、a_test.cc、b_test.cc、c_test.cc という
bazel query '//foo:all'
は、生成されたすべてのルールを一覧表示します。
$ bazel query '//foo:all' | sort //foo:count_lines_a_test //foo:count_lines_b_test //foo:count_lines_c_test
選択
select( {conditionA: valuesA, conditionB: valuesB, ...}, no_match_error = "custom message" )
select()
は、ルール属性を作成するヘルパー関数です。
構成可能。
画像の右側を置き換えて、
ほぼ
属性の割り当てを行えば、その値がコマンドラインの Bazel フラグに依存するようになります。
たとえば、プラットフォーム固有の依存関係を定義したり、依存関係を
ルールが「developer」で構築されているかどうかに応じて、異なるリソースを埋め込む
「release」との比較モードです。
基本的な使用方法は次のとおりです。
sh_binary( name = "mytarget", srcs = select({ ":conditionA": ["mytarget_a.sh"], ":conditionB": ["mytarget_b.sh"], "//conditions:default": ["mytarget_default.sh"] }) )
これにより、次の srcs
属性が
通常のラベルを置き換えることで構成可能な sh_binary
リスト割り当てを select
呼び出しでリストします。
照合します。各条件はラベルである
参照先
config_setting
または
constraint_value
,
「一致する」ターゲットの構成が、想定される一連の
使用できます。mytarget#srcs
の値は、
label list は現在の呼び出しと一致します。
注:
- どの呼び出しでも、1 つの条件のみが選択されます。
- 複数の条件が一致し、そのうちの 1 つが他の条件の特殊化である場合、 スペシャライゼーションが優先されます条件 B は 条件 A の特殊化(B にすべて同じフラグと制約がある場合) 値を A として追加し、追加のフラグまたは制約値として設定できます。また、 スペシャライゼーション解決では 注文を作成できるようには設計されていません (以下の例 2)をご覧ください。
- 複数の条件が一致し、そのうちの 1 つがすべて Bazel はエラーで失敗します。
- 特殊な疑似ラベル
//conditions:default
は次のとおりです。 一致するものとみなされます。この条件が 省略した場合は、エラーを避けるために、他のルールに一致する必要があります。 select
はより大きなサイズの内部に埋め込むことができます 割り当てられています。したがって、srcs = ["common.sh"] + select({ ":conditionA": ["myrule_a.sh"], ...})
とsrcs = select({ ":conditionA": ["a.sh"]}) + select({ ":conditionB": ["b.sh"]})
は有効な式です。select
はほとんどの属性に対応していますが、すべてではありません。非対応 ドキュメントではnonconfigurable
とマークされています。サブパッケージ
subpackages(include, exclude=[], allow_empty=True)
subpackages()
はglob()
に似たヘルパー関数です。 サブパッケージをリストします。同じglob()
として指定され、任意のサブパッケージに一致します。 現在読み込み中の BUILD ファイルの直下の子孫である必要があります。include と include の詳細な説明と例については、glob を参照してください。 除外パターンを確認できます返されるサブパッケージのリストは並べ替えられ、次の内容が含まれます 現在の読み込みパッケージからの相対パスで、
include
であり、exclude
内のものは対象外です。例
次の例では、パッケージ
foo/BUILD
のすべての直接サブパッケージが一覧表示されます。# The following BUILD files exist: # foo/BUILD # foo/bar/baz/BUILD # foo/sub/BUILD # foo/sub/deeper/BUILD # # In foo/BUILD a call to subs = subpackages(include = ["**"]) # results in subs == ["sub", "bar/baz"] # # 'sub/deeper' is not included because it is a subpackage of 'foo/sub' not of # 'foo'
通常は、この関数を直接呼び出すのではなく、 ユーザーが「サブパッケージ」を使用しているモジュール skylib