このページでは、マクロを使用して BUILD 言語を拡張する方法について説明します。 説明します。
Bazel 拡張機能は、末尾が .bzl
のファイルです。次を使用:
拡張機能からシンボルをインポートするload ステートメント
より高度なコンセプトについて学習する前に、まず次のことを行います。
両方の言語で使用されている Starlark 言語について読む。
BUILD
ファイルと.bzl
ファイル。変数を共有する方法を確認する 2 つの
BUILD
ファイルの間にある。
マクロとルール
マクロはルールをインスタンス化する関数です。これは、
BUILD
ファイルの繰り返しが多くなりすぎたり、複雑すぎたりしています。これは、ファイルを再利用できるため
いくつかあります。この関数は、BUILD
ファイルが読み取られるとすぐに評価されます。変更後
BUILD
ファイルの評価により、Bazel ではマクロに関する情報がほとんどありません。
マクロで genrule
が生成されると、Bazel は
genrule
。その結果、bazel query
は生成された genrule
のみを一覧表示します。
ルールはマクロよりも強力です。Bazel にアクセスできる 何が起こっているのかを完全に制御できます。たとえば、 適用できます。
単純なロジックを再利用する場合は、マクロから始めます。マクロが ルール化することをおすすめします。新しい言語のサポート 通常はルールを使用します。ルールは上級ユーザー向けであり、ほとんどの ユーザーが作成する必要はありません。既存の P-MAX キャンペーンを できます。
評価モデル
ビルドは 3 つのフェーズで構成されます
読み込みフェーズ。まず、すべての拡張機能とすべての
BUILD
を読み込んで評価します。 ビルドに必要なファイルが生成されます。BUILD
ファイルの実行は、 は、ルールをインスタンス化します(ルールは呼び出されるたびに、グラフに追加されます)。 ここでマクロが評価されます。分析フェーズ。ルールのコードが実行されます(
implementation
関数をインスタンス化し、アクションをインスタンス化します。アクションは、インフラストラクチャの 「run gcc on hello.c and get hello.o」と入力します。生成前にどのファイルを 実際のコマンドを実行するだけです言い換えれば、分析フェーズは 生成フェーズで生成されたグラフを読み込み、アクション グラフを生成します。実施フェーズ。アクションの実行(アクションの出力の少なくとも 1 つが 必要ありません。ファイルがない場合やコマンドが 1 つの出力の生成に失敗した場合は、 ビルドが失敗します。このフェーズではテストも実行されます。
Bazel は並列処理を使用して .bzl
ファイルと BUILD
の読み取り、解析、評価を行います。
できます。ファイルはビルドごとに最大 1 回読み取られ、評価の結果は
再利用できます。ファイルは、すべての依存関係(load()
)が 1 回だけ評価される
ステートメント)は解決されました。設計により、.bzl
ファイルの読み込み時に
値と関数を定義するだけです。
Bazel は機能性を重視します。依存関係分析を使用して、処理する必要があるファイルを どのルールを分析すべきか、どのアクションを実行すべきかなど、対象 たとえば、ルールによって現在のビルドには必要ないアクションが生成された場合、 実行されません。
広告表示オプションを作成する
次の目的で最初のマクロを作成 いくつかあります。次に、マクロの詳細と 「カスタム動詞」の作成に使用します。
ルールの利用を開始するには、ルールのチュートリアルをご覧ください。 詳しくは、ルールのコンセプトをご覧ください。
以下の 2 つのリンクは、独自の拡張機能を作成する際に役立ちます。維持 できます。
さらに先へ
マクロとルールに加えて、ルールを アスペクトとリポジトリ ルール。
Buildifier を使用する コードの書式設定と lint チェックを行います。
.bzl
スタイルガイドに準拠する。コードをテストします。
ユーザーに役立つドキュメントを生成します。
コードのパフォーマンスを最適化する。
拡張機能を他のユーザーにデプロイします。