このセクションでは、一般的な各種用語と概念を定義します。 作成ルールを使用します。
目次
- Bourne シェルのトークン化
- ラベルの拡張
- ほとんどのビルドルールで定義される一般的な属性
- すべてのビルドルールに共通する属性
- すべてのテストルールに共通する属性(*_test)
- すべてのバイナリルールに共通する属性(*_binary)
- 構成可能な属性
- 暗黙的な出力ターゲット
Bourne シェルのトークン化
一部のルールで、特定の文字列属性が複数に分割される Bourne シェルのトークン化ルールに従って単語が抽出されます。 スペースは引用符で囲まないで、個々の単語を区切り、 二重引用符とバックスラッシュは、 説明しました。
このトークン化の対象となる属性は、 使用しないでください。
「Make」の対象となる属性変数展開と Bourne シェル
トークン化は通常、任意のオプションを
その他のツールもサポートしています。このような属性の例として、
cc_library.copts
と java_library.javacopts
。
これらの置換により
構成固有のリストに展開する単一の文字列変数
できます。
ラベルの展開
ごく一部のルールでは、一部の文字列属性にラベルが適用される
展開: 文字列として有効なラベルが
部分文字列(//mypkg:target
など)であり、そのラベルは
現在のルールの前提条件として宣言されている場合、
で表されるファイルのパス名
ターゲット
//mypkg:target
。
属性の例: genrule.cmd
、
cc_binary.linkopts
。詳細は、
相対ラベルの有無といった問題に対して
開いています。複数のファイルに展開されるラベルは
ルール属性のドキュメントで、
あります。
ほとんどのビルドルールで定義される一般的な属性
このセクションでは、多くのビルドルールによって定義される属性について説明します。 すべてではありません
属性 | 説明 |
---|---|
data |
ラベルのリスト。デフォルトは 実行時にこのルールで必要なファイル。ファイルまたはルールのターゲットをリストできます。一般 任意のターゲットを許可します。
新しいルールで |
deps |
ラベルのリスト。デフォルトは
このターゲットの依存関係。通常は、ルール ターゲットのみをリストします。(ただし、
一部のルールでは、 通常、言語固有のルールにより、リストされるターゲットは、 特定のプロバイダ
ターゲットが、Cloud KMS を使用して別のリソースに依存することの意味の正確なセマンティクスは、
ほとんどの場合、 |
licenses |
文字列のリスト。設定不可
デフォルトは この特定のターゲットに使用されるライセンス タイプの文字列のリスト。 これは、Bazel で使用されなくなった非推奨のライセンス API の一部です。すべきでないこと 使用します。 |
srcs |
ラベルのリスト。デフォルトは
このルールによって処理または追加されたファイル。通常、ファイルは直接リストされますが、
は、ルールのターゲット( 多くの場合、言語固有のルールにより、リストされたファイルには特定のルールが ファイル拡張子。 |
すべてのビルドルールに共通する属性
このセクションでは、すべてのビルドに暗黙的に追加される属性について説明します。 できます。
属性 | 説明 |
---|---|
compatible_with |
以下に加えて、このターゲットを構築できる環境のリスト 環境に依存しています。 これは Bazel の制約システムの一部です。これにより、ユーザーはどの Pod が ターゲット同士の相互依存が可能です。たとえば、外部にデプロイ可能な バイナリは、企業秘密のコードを含むライブラリに依存すべきではありません。詳しくは、 ConstraintSemantics をご覧ください。 |
deprecation |
String;設定不可デフォルトは このターゲットに関連付けられている、説明付きの警告メッセージ。 通常これは、ターゲットが古くなったことをユーザーに知らせるために使用されます。 別のルールに置き換わっている、特定のパッケージに限定公開されている なんらかの理由で有害と判断されます名前は、 ウェブページ、バグ番号、移行 CL の例などの参照情報を メッセージを回避するために必要な変更を簡単に確認できます。 交換の減少として使用できる新しい目標がある場合、それは 古いターゲットのすべてのユーザーを移行することをおすすめします
この属性はビルド方法には影響しませんが、
ビルドツールの診断出力に影響することがあります。ビルドツールは
パッケージ内の依存関係はこの警告から除外されるため、 たとえば、非推奨のルールのテストを構築しても、 警告が表示されます。 非推奨のターゲットが別の非推奨のターゲットに依存している場合、警告は表示されません。 メッセージが発行されます。 ユーザーが使用をやめると、ターゲットを削除できます。 |
distribs |
文字列のリスト。設定不可
デフォルトは この特定のターゲットに使用される分散方法文字列のリスト。 これは、Bazel で使用されなくなった非推奨のライセンス API の一部です。すべきでないこと 使用します。 |
exec_compatible_with |
リスト
|
exec_properties |
文字列の辞書デフォルトは このターゲットに対して選択されたプラットフォームの プラットフォーム レベルのプロパティとターゲット レベルのプロパティの両方にキーが存在する場合、値はターゲットから取得されます。 |
features |
feature 文字列のリストデフォルトは 機能とは、ターゲットで有効または無効にできる文字列タグです。「 対象物の意味はルール自体によって異なります。 この |
restricted_to |
代わりにこのターゲットを構築できる環境のリスト 環境に依存しています。
これは、Bazel の制約システムの一部です。詳しくは、
|
tags |
文字列のリスト。設定不可
デフォルトは
タグは任意のルールで使用できます。テストと検証のタグ
Bazel は次の場合にサンドボックス コードの動作を変更します。
任意のテストまたは
テストのタグは通常、テストにおける役割にアノテーションを付けるために使用されます。 デバッグとリリースのプロセスを使用します通常、タグは C++ と Python で最も有用です このテストにはランタイム アノテーション機能がありません。タグとサイズの使用 要素を使用すると、コードベースに基づいてテストスイートを柔軟に組み合わせることができます。 チェックイン ポリシーが適用されます。
Bazel は、
テストルールの
|
target_compatible_with |
ラベルのリスト。デフォルトは
リスト
互換性のないターゲットに推移的に依存するターゲット自体 互換性がないと見なされますまた、ビルドとテストでもスキップされます。 空のリスト(デフォルト)は、ターゲットに互換性があることを示します。 すべてのプラットフォームに対応します
Workspace ルール以外のすべてのルールでサポートされています。
属性です。
一部のルールでは、この属性は機能しません。たとえば、
詳しくは、 プラットフォーム 互換性のないターゲットのスキップに関する詳細をご覧ください。 |
testonly |
ブール値設定不可デフォルトは
同様に、
テスト( この属性は、ターゲットを バイナリに含まれているファイルです。 testonly は実行時ではなくビルド時に適用され、伝播するため 依存関係ツリーで拡散している場合は、慎重に適用する必要があります。対象 偽のスタブやフェイクなど、 単体テストや統合テストにも役立つ 本番環境にリリースされるのと同じバイナリが関係する testonly とマークすべきではありません。これとは逆に、 リンクさえも危険です 通常の動作をオーバーライドする場合は、必ず testonly とマークしてください。 |
toolchains |
このターゲットの [Make 変数] が、
許可します。これらのターゲットは、特定のリソースへの
これは、Terraform の概念は
ツールチェーンの解決
これは、プラットフォームに依存する設定のルール実装で使用されます。これは使用できません。
特定の |
visibility |
ラベルのリスト。
構成不可
デフォルトは
ターゲットの |
すべてのテストルールに共通する属性(*_test)
このセクションでは、すべてのテストルールに共通する属性について説明します。
属性 | 説明 | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
args |
文字列のリスト。条件
$(location) と
[変数を作成] で置換する
Bourne Shell のトークン化:デフォルトは Bazel がターゲットに渡すコマンドライン引数
これらの引数は、 |
||||||||||||||||||||
env |
文字列の辞書適用される
$(location) と
「変数を作成」デフォルトは
テストの実行時に設定する追加の環境変数を指定します。
この属性は、 |
||||||||||||||||||||
env_inherit |
文字列のリスト。デフォルトは プロジェクトから継承する追加の環境変数を
この属性はネイティブ ルール( |
||||||||||||||||||||
size |
文字列 テスト ターゲットの「重さ」、つまり実行に必要な時間/リソースを指定します。 単体テストは「小規模」、統合テストは「中」、エンドツーエンド テストは「大規模」と見なされますまたは
「enormous」です。Bazel はこのサイズを使用してデフォルトのタイムアウトを決定します。デフォルトのタイムアウトは
テストサイズは、以下のデフォルトのタイムアウトと想定されるピーク ローカル リソースに対応します。 用途:
環境変数
|
||||||||||||||||||||
timeout |
文字列 返される前に予想されるテスト実行時間。
テストのサイズ属性はリソースの見積もりを制御しますが、テストのサイズ属性はリソースの見積もりを
個別に設定できます。明示的に指定しない場合、
タイムアウトはテストサイズに基づきます。テスト
タイムアウトは
上記以外の時間では、テストのタイムアウトは
環境変数
|
||||||||||||||||||||
flaky |
ブール値設定不可
デフォルトは テストを「不安定」としてマークします。 設定すると、テストが 3 回まで実行され、失敗した場合にのみ不合格としてマークされます 失敗します。デフォルトでは、この属性は False に設定されており、テストは 1 回だけ実行されます。なお、この属性は、通常は使用しないことをおすすめします。 テストは、アサーションが維持されていれば、確実に合格する必要があります。 |
||||||||||||||||||||
shard_count |
50 以下の正の整数。デフォルトは 並列シャードの数を指定します 使用できます。 設定した場合、この値は、インプレッションの数を決めるために使用される
テスト実行に使用する並列シャードを指定します一部のテストでは
このパラメータは、シャーディングの有効化に
あります。 テストのシャーディングが有効になっている場合、テストの生成時に環境変数 シャーディングを行うには、テストランナーがテストのシャーディング プロトコルをサポートしている必要があります。 そうでない場合は、すべてのシャードですべてのテストが実行される可能性が高いため、 意図したものではありません。 詳しくは、 テストのシャーディング をご覧ください。 |
||||||||||||||||||||
local |
ブール値設定不可
デフォルトは テストをサンドボックス化せずにローカルで強制的に実行します。 True に設定すると、「local」を指定するのと同じ結果になります。タグとして
( |
すべてのバイナリルールに共通する属性(*_binary)
このセクションでは、すべてのバイナリルールに共通する属性について説明します。
属性 | 説明 |
---|---|
args |
文字列のリスト。条件
$(location) と
[変数を作成] で置換する
Bourne Shell のトークン化:
構成不可、
デフォルトは
Bazel の実行時にターゲットに渡すコマンドライン引数
注: ターゲットの実行時に引数は渡されません。
Bazel 以外(たとえば、Terraform でバイナリを手動で実行する、
|
env |
文字列の辞書適用される
$(location) と
「変数を作成」デフォルトは ターゲットの作成時に設定する追加の環境変数を指定します。
この属性はネイティブ ルール(
注: ターゲットの実行時に環境変数は設定されません。
Bazel 以外(たとえば、Terraform でバイナリを手動で実行する、
|
output_licenses |
文字列のリスト。デフォルトは このバイナリが生成する出力ファイルのライセンス。 これは、Bazel で使用されなくなった非推奨のライセンス API の一部です。すべきでないこと 使用します。 |
構成可能な属性
ほとんどの属性は「構成可能」です。つまり、実行時に値が変更されることがあります。 ターゲットはさまざまな方法で構築されます。具体的には、構成可能な属性が Bazel コマンドラインに渡されるフラグ、または 下流の依存関係がターゲットをリクエストしています。これは 複数のプラットフォームやコンパイル モードに応じてターゲットをカスタマイズできます。
次の例では、ターゲットごとに異なるソースを宣言しています
構築できますbazel build :multiplatform_lib --cpu x86
実行中
x86_impl.cc
を使用してターゲットをビルドし、
--cpu arm
を指定すると、代わりに arm_impl.cc
が使用されます。
cc_library( name = "multiplatform_lib", srcs = select({ ":x86_mode": ["x86_impl.cc"], ":arm_mode": ["arm_impl.cc"] }) ) config_setting( name = "x86_mode", values = { "cpu": "x86" } ) config_setting( name = "arm_mode", values = { "cpu": "arm" } )
select()
関数
構成可能な属性の代替値が選択されます。
対象: config_setting
または constraint_value
ターゲットの構成が満たしている条件を定義します。
Bazel は、マクロの処理の後と前に構成可能な属性を評価します
処理ルール(厳密には、
読み込みと分析のフェーズをご覧ください。
select()
の評価前の処理では、
select()
が選択するブランチに格納されます。マクロなど
動作し、bazel query
は、
ターゲットの構成可能な依存関係について、控えめに推測するだけです。詳しくは、
こちらのよくある質問
ルールとマクロで select()
を使用する方法の詳細をご覧ください。
ドキュメントで nonconfigurable
とマークされている属性は使用できません
使用できます。Bazel では属性を構成できないのが一般的です。
問題解決方法を判断するには、その価値を社内で知る必要があります
select()
。
<ph type="x-smartling-placeholder"></ph>をご覧ください。 構成可能なビルド属性をご覧ください。
暗黙的な出力ターゲット
C++ の暗黙的な出力は非推奨になりました。使用は控えてください 可能な限り他の言語で行います非推奨のパスはまだありません 最終的にはサポート終了となります。
BUILD ファイルでビルドルールを定義する場合、
新しい名前付きのルール ターゲットをパッケージ内で宣言します。多数のビルドルール
関数は、暗黙的に 1 つ以上の出力ファイルを伴う
その内容と意味はルール固有です。
たとえば、明示的に宣言する
java_binary(name='foo', ...)
個のルールに加えて、
出力ファイルの暗黙的な宣言
foo_deploy.jar
を同じパッケージのメンバーとしてターゲットに設定します。
(このターゲットは自己完結型の Java アーカイブであり、
します)。
暗黙的な出力ターゲットは、
ターゲット グラフ。他のターゲットと同様にオンデマンドで構築され、
トップレベルのビルド コマンドで指定されるか、
他のビルド ターゲットに必要な前提条件です。特徴
BUILD ファイルでは依存関係として参照され、
bazel query
などの分析ツールの出力。
ビルドルールの種類ごとに、ルールのドキュメントに 暗黙的な依存関係の名前と内容が 出力が生成されます。
2 つのモデルの間に重要だが、微妙な違いは
2 つの Namespace があります。
labels はターゲットを識別します。
ルールまたはファイルがあります。ファイル ターゲットは、
ソース(または入力)ファイルのターゲットと派生(または出力)ファイル
できます。BUILD ファイルでは
コマンドラインからビルドするか、bazel query
を使用して調べる
これがターゲット名前空間です。各ファイルターゲットは
ディスク上の 1 つの実際のファイル(「ファイルシステムの名前空間」)。各ルール
ターゲットはディスク上のゼロ、1 つ、または複数の実際のファイルに対応します。
対応するターゲットがないファイルがディスク上に存在する可能性があります。
C++ コンパイル中に生成された .o
オブジェクト ファイルなど
BUILD ファイル内やコマンドラインから参照することはできません。
このようにして、特定の実装の詳細がビルドツールに表示されない場合があります。
確認しますこれについては
BUILD コンセプト リファレンスをご覧ください。