bazelrc 構成ファイルを書き込む

<ph type="x-smartling-placeholder"></ph> 問題を報告する ソースを表示 夜間 · 7.3 · 7.2 · 7.1 · 7.0 · 6.5

Bazel では多くのオプションを使用できます。頻繁に異なるオプションもあります(例: --subcommands など)と、複数のビルド( --package_path)です。変更されていないオプションをすべてのビルドに指定しないようにするには、 などのコマンドを使用する場合、 .bazelrc

.bazelrc ファイルはどこにありますか?

Bazel は次の場所でオプションの構成ファイルを探します。 下に示す順序です。オプションはこの順序で解釈されるため、 後続のファイルで指定されていたオプションが、以前のファイルの値をオーバーライドする場合があります。 対立が起きます。どのファイルを読み込むかを制御するオプションはすべて、 起動オプション。つまり、bazel の後に実行し、 をコマンドの前に付けます(buildtest など)。

  1. システムの RC ファイル--nosystem_rc が存在しない場合)。

    パス:

    • Linux/macOS/Unix の場合: /etc/bazel.bazelrc
    • Windows の場合: %ProgramData%\bazel.bazelrc

    このファイルが存在しなくてもエラーにはなりません。

    システム指定の別の場所が必要な場合は、カスタムの鍵を作成し、 Bazel バイナリ。BAZEL_SYSTEM_BAZELRC_PATH 値をオーバーライドしています。 //src/main/cpp:option_processor。 システムが指定した場所には、環境変数の参照、 たとえば、Unix では ${VAR_NAME}、Windows では %VAR_NAME% です。

  2. Workspace の RC ファイル--noworkspace_rc が存在しない場合)。

    パス: ワークスペース ディレクトリ(メインのディレクトリの隣)の .bazelrc WORKSPACE ファイルなど)。

    このファイルが存在しなくてもエラーにはなりません。

  3. ホーム RC ファイル--nohome_rc が存在しない場合)。

    パス:

    • Linux/macOS/Unix の場合: $HOME/.bazelrc
    • Windows の場合: %USERPROFILE%\.bazelrc(存在する場合)または %HOME%/.bazelrc

    このファイルが存在しなくてもエラーにはなりません。

  4. ユーザー指定の RC ファイル--bazelrc=file

    このフラグは省略可能ですが、複数回指定することもできます。

    /dev/null は、それ以降のすべての --bazelrc が無視されることを示します。 は、リリース用など、ユーザー RC ファイルの検索を無効にするのに便利です。 説明します。

    例:

    --bazelrc=x.rc --bazelrc=y.rc --bazelrc=/dev/null --bazelrc=z.rc
    
    • x.rcy.rc が読み取られます。
    • 以前の /dev/null により、z.rc は無視されます。

このオプションの構成ファイルに加えて、Bazel はグローバル rc を探します。 表示されます。詳細については、グローバル bazelrc セクションをご覧ください。

.bazelrc の構文とセマンティクス

すべての UNIX "rc".bazelrc ファイルは、行ベースのテキスト ファイルです。 学習します。空の行と #(コメント)で始まる行は無視されます。各 同じ単語に従ってトークン化された一連の単語が Bourne Shell と同等です。

インポート

import または try-import で始まる行は特殊な行です。これらを使用して読み込む その他の「rc」できます。ワークスペースのルートからの相対パスを指定するには、 import %workspace%/path/to/bazelrc を書き込みます。

importtry-import の違いは、次の場合に Bazel が失敗することです。 import のファイルがない(または読み取れない)が、try-import のファイルがない 表示されます。

インポートの優先順位:

  • インポートしたファイルのオプションは、以前に指定したオプションよりも優先されます 必要があります。
  • import ステートメントの後に指定したオプションは、 オプションを指定します。
  • 後からインポートしたファイルのオプションは、以前にインポートしたファイルよりも優先されます。

オプションのデフォルト

bazelrc のほとんどの行では、デフォルトのオプション値が定義されています。各単語の最初の単語は、 行には、これらのデフォルトがいつ適用されるかを指定します。

  • startup: 起動オプション。コマンドの前に配置され、説明されます。 (bazel help startup_options
  • common: サポートするすべての Bazel コマンドに適用する必要があるオプション できます。この方法で指定されたオプションをコマンドがサポートしていない場合、 このオプションは、他の Bazel コマンドで有効である限り無視されます。 これはオプション名にのみ適用されます。現在のコマンドが オプションが指定された名前で、指定された値がサポートされていない場合、 失敗します。
  • always: すべての Bazel コマンドに適用されるオプション。コマンドが サポートされていない場合は失敗します。
  • command: オプションが適用される Bazel コマンド(buildquery など) 適用されます。これらのオプションは、継承されるすべてのコマンドに 実行されます。(たとえば、testbuild から継承します)。

これらの各行は複数回使用でき、 最初の単語が 1 行にあるかのように結合されます。(CVS のユーザーは、 「スイス アーミーナイフ」が付いたコマンドを実行すると、 構文が .cvsrc に似ています)。たとえば、次のようになります。

build --test_tmpdir=/tmp/foo --verbose_failures
build --test_tmpdir=/tmp/bar

組み合わせると、次のようになります。

build --test_tmpdir=/tmp/foo --verbose_failures --test_tmpdir=/tmp/bar

したがって、有効なフラグは --verbose_failures--test_tmpdir=/tmp/bar です。

オプションの優先度:

  • コマンドラインのオプションは、rc ファイルのオプションよりも常に優先されます。 たとえば、rc ファイルに build -c opt と記述されていて、コマンドライン フラグが -c dbg の場合は、コマンドライン フラグが優先されます。
  • rc ファイル内では、優先順位は具体性によって決まります。 行よりも具体的なコマンドが優先されます。

    特異性は継承によって定義されます。一部のコマンドは Pod 構成から 継承されるコマンドが基本コマンドよりも限定的になります。 使用できます。たとえば、testbuild コマンドを継承するため、すべての bazel build フラグが bazel test に対して有効になり、すべての build 行が bazel test(同じオプションに test 行がある場合を除く)。RC が ファイルの内容:

    test -c dbg --test_env=PATH
    build -c opt --verbose_failures
    

    この場合、bazel build //foo-c opt --verbose_failures を使用し、bazel test //foo--verbose_failures -c dbg --test_env=PATH を使用します。

    継承(特異性)グラフは次のとおりです。

    • すべてのコマンドは common から継承されます。
    • 次のコマンドは、 build: testruncleanmobile-installinfoprint_actionconfigcqueryaquery
    • coveragetest から継承します。
  • 同じコマンドのオプションを同程度の特異性で指定する 2 行は、 ファイル内での出現順に解析されます。

  • この優先順位ルールはファイルの順序と一致しないため、 RC ファイル内の優先順位に従えば、読みやすくなります。 common オプションがあり、末尾には最も具体的なコマンドが ファイルの最後にあります。このように、オプションが読み取られる順番は、 適用される順序と同じなので、より直感的です。

rc ファイルの 1 行に指定された引数には、 オプションを指定することはできません。たとえば 同じファイル内で指定されているオプションが、兄弟要素よりも優先度が低くなります。 指定され、常に非リソース引数の明示的なリストの先頭に オプション引数。

--config

rc ファイルを使用すると、オプションのデフォルトを設定するだけでなく、オプションをグループ化できる 一般的なグループ化の省略形もできますこれを行うには、:name を追加します。 接頭辞が付加されます。これらのオプションはデフォルトで無視されますが、 オプション --config=name が指定されている場合は含められ、 .bazelrc ファイルでも再帰的に実行できます。さらに、ファイル内であっても、 別の構成定義を使用します。command:name で指定されたオプションは、 上記の優先順位で、該当するコマンド用に展開されています。

--config=foo は、定義されているオプションに展開されます。 rc ファイル「インプレース」オプションが --config=foo オプションと同じ優先順位になります。 でした。

この構文は、startup を使用して設定することはできません。 起動オプション。設定 .bazelrc の startup:config-name --some_startup_option は無視されます。

以下に、~/.bazelrc ファイルの例を示します。

# Bob's Bazel option defaults

startup --host_jvm_args=-XX:-UseParallelGC
import /home/bobs_project/bazelrc
build --show_timestamps --keep_going --jobs 600
build --color=yes
query --keep_going

# Definition of --config=memcheck
build:memcheck --strip=never --test_timeout=3600

Bazel の動作を管理するその他のファイル

.bazelignore

ワークスペース内のディレクトリを指定できます 関係プロジェクトなど、Bazel で無視する範囲を指定します。 構築することもできますという名前のファイルを ワークスペースのルートの .bazelignore Bazel で無視するディレクトリを追加します(1 つずつ 追加します。エントリは、ワークスペースのルートからの相対位置になります。

グローバル bazelrc ファイル

Bazel は、オプションの bazelrc ファイルを次の順序で読み取ります。

  1. etc/bazel.bazelrc にあるシステム rc-file。
  2. $workspace/tools/bazel.rc にある Workspace rc-file
  3. ホーム rc-file は $HOME/.bazelrc にあります

ここに示す各 bazelrc ファイルには、それぞれ対応するフラグがあります。 無効にします(例: --nosystem_rc--noworkspace_rc--nohome_rc)。Google Chat では --ignore_all_rc_files を渡すことで、Bazel がすべての bazelrc を無視するようにもします。 選択します。