拡張機能の概要

問題を報告する ソースを表示 夜間 · 7.3 · 7.2 · 7.1 · 7.0 · 6.5

このページでは、マクロを使用して 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 つのリンクは、独自の拡張機能を作成する際に役立ちます。維持 できます。

さらに先へ

マクロルールに加えて、ルールを アスペクトリポジトリ ルール