寫入 bazelrc 設定檔

回報問題 查看原始碼 夜間 7.2 7.1 7.0 6.5 6.4

Bazel 接受許多選項。有些選項並不固定 (例如 --subcommands),其他版本則保持不變 (例如 --package_path)。避免為每個版本指定這些未變更的選項 等指令),您可以在設定檔中指定選項,名稱為 .bazelrc

.bazelrc 檔案在哪裡?

Bazel 會在下列位置尋找選用設定檔 依照下方所示的順序。這些選項會按照這個順序解讀 但其中的選項可覆寫先前檔案中的值, 衝突狀況用於控制檔案載入的所有選項 啟動選項,表示它們必須發生在 bazel 之後 (buildtest 等) 之前。

  1. 系統 RC 檔案 (除非 --nosystem_rc 存在)。

    路徑:

    • Linux/macOS/Unixes:/etc/bazel.bazelrc
    • Windows:%ProgramData%\bazel.bazelrc

    如果這個檔案不存在,則不會發生錯誤。

    如果需要其他系統指定的位置,您必須建立自訂 Bazel 二進位檔,在當中覆寫 BAZEL_SYSTEM_BAZELRC_PATH 的值 //src/main/cpp:option_processor。 系統指定的位置可能包含環境變數參照。 例如 Unix 上的 ${VAR_NAME} 或 Windows 上的 %VAR_NAME%

  2. 工作區 RC 檔案 (除非 --noworkspace_rc 存在)。

    路徑:工作區目錄中的 .bazelrc (位於主要目錄旁) WORKSPACE 檔案)。

    如果這個檔案不存在,則不會發生錯誤。

  3. 主遠端控制檔案 (除非 --nohome_rc 存在)。

    路徑:

    • Linux/macOS/Unixes:$HOME/.bazelrc
    • Windows:%USERPROFILE%\.bazelrc (如有),或 %HOME%/.bazelrc

    如果這個檔案不存在,則不會發生錯誤。

  4. 使用者指定的 RC 檔案 (如果使用 --bazelrc=file

    這個標記為選用項目,但也可以多次指定。

    /dev/null 表示會忽略所有其他的 --bazelrc, 適用於停用使用者弧形檔案的搜尋功能 (例如發布中的瀏覽器版本) 建構應用程式

    例如:

    --bazelrc=x.rc --bazelrc=y.rc --bazelrc=/dev/null --bazelrc=z.rc
    
    • 已讀取 x.rcy.rc
    • 由於先前的 /dev/null,系統已忽略 z.rc

除了這個選用設定檔外,Bazel 也會搜尋全域弧線 檔案。詳情請參閱全球 bazelrc 章節。

.bazelrc 語法和語意

例如所有 UNIX "rc"檔案,.bazelrc 檔案是採用一行程式碼的文字檔案 文法系統會忽略開頭為 # (註解) 的空白行和行。每項 行包含一系列的字詞,根據 做為 Bourne 殼層的

匯入

開頭為 importtry-import 的行數特殊:使用這些線條載入 其他「rc」檔案。如要指定與工作區根目錄相關的路徑, 寫入 import %workspace%/path/to/bazelrc

importtry-import 的差異在於,如果 Bazel 要求故障 缺少 import 的檔案 (或無法讀取),但由於 try-import 沒有這個檔案 檔案。

匯入優先順序:

  • 匯入檔案中的選項優先順序高於先前指定的選項 匯入陳述式
  • 匯入陳述式之後所指定的選項,優先順序將高於 匯入檔案中的選項
  • 之後匯入的檔案選項會優先於先前匯入的檔案。

預設值

bazelrc 的大部分行都會定義預設選項值。每個管道的第一個字詞 線條會指定套用這些預設值的時機:

  • startup:啟動選項 (位於指令之前),相關說明 位置:bazel help startup_options
  • common:應套用至所有支援 Bazel 指令的選項 具體做法是指示 Kubernetes 建立並維護 一或多個代表這些 Pod 的物件如果指令不支援以這種方式指定的選項, 選項只要對 some 其他 Bazel 指令有效,系統就會予以忽略。 請注意,這僅適用於選項名稱:如果目前的指令接受 選項,但不支援指定值, 將會失敗
  • always:適用於所有 Bazel 指令的選項。如果指令無法 將會失敗。
  • command:Bazel 指令,例如選項的 buildquery 或這些選項也適用於從 指定的指令(例如,test 繼承自 build)。

每一行可能多次使用, 系統會將第一個字詞合併成一行。(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,指令列旗標的優先順序最高。
  • 在候選檔案內,優先順序受到明確性規範:較寬的行。 如果指令較不具體,指令就會優先於其他行

    具體性是由沿用機制定義,部分指令沿用以下的選項: 因此讓繼承指令比基礎指令更明確 指令舉例來說,test 繼承自 build 指令,因此所有 bazel build 標記都適用於 bazel test,而所有 build 行也都會套用到 除非相同選項有 test 行,否則為 bazel test。如果弧形 檔案顯示:

    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
    • 下列指令繼承自 (且更具體) buildtestruncleanmobile-installinfoprint_actionconfigcqueryaquery
    • coverage 繼承自 test
  • 有兩行可針對相同指令指定選項相等 按照檔案內出現的順序進行剖析。

  • 由於這項優先順序規則與檔案順序不符 只要按照 rc 檔案中的優先順序排列,即可讀取:從 common 選項,並在結尾為最精確的指令做為結尾 檔案底部。如此一來,選項讀取順序就是 就像套用順序一樣,更加直覺。

弧形檔案行中指定的引數可能包含 例如建構目標的名稱等例如 相同檔案中指定的選項,優先順序低於同層級的項目 而且一律會前面加上非 選項。

--config

除了設定選項預設值之外,弧形檔案也能用來分組選項 並提供常用分組的簡寫。做法是新增 :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 忽略的目錄 互動項目與工作區根目錄相關。

全域 bazelrc 檔案

Bazel 會按照以下順序讀取選用的 bazelrc 檔案:

  1. 系統架構檔案位於 etc/bazel.bazelrc
  2. 工作區架構檔案位於 $workspace/tools/bazel.rc
  3. 主目錄檔案位於 $HOME/.bazelrc

這裡列出的每個 bazelrc 檔案都有對應的旗標,可用於 停用這些功能 (例如 --nosystem_rc--noworkspace_rc--nohome_rc)。你可以 同時透過傳遞 --ignore_all_rc_files,讓 Bazel 忽略所有架構 啟動選項。