Bazel 接受許多選項。有些選項並不固定 (例如
--subcommands
),其他版本則保持不變 (例如
--package_path
)。避免為每個版本指定這些未變更的選項
等指令),您可以在設定檔中指定選項,名稱為
.bazelrc
。
.bazelrc
檔案在哪裡?
Bazel 會在下列位置尋找選用設定檔
依照下方所示的順序。這些選項會按照這個順序解讀
但其中的選項可覆寫先前檔案中的值,
衝突狀況用於控制檔案載入的所有選項
啟動選項,表示它們必須發生在 bazel
之後
(build
、test
等) 之前。
系統 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%
。- Linux/macOS/Unixes:
工作區 RC 檔案 (除非
--noworkspace_rc
存在)。路徑:工作區目錄中的
.bazelrc
(位於主要目錄旁)WORKSPACE
檔案)。如果這個檔案不存在,則不會發生錯誤。
主遠端控制檔案 (除非
--nohome_rc
存在)。路徑:
- Linux/macOS/Unixes:
$HOME/.bazelrc
- Windows:
%USERPROFILE%\.bazelrc
(如有),或%HOME%/.bazelrc
如果這個檔案不存在,則不會發生錯誤。
- Linux/macOS/Unixes:
使用者指定的 RC 檔案 (如果使用
--bazelrc=file
這個標記為選用項目,但也可以多次指定。
/dev/null
表示會忽略所有其他的--bazelrc
, 適用於停用使用者弧形檔案的搜尋功能 (例如在發布子版本中)。例如:
--bazelrc=x.rc --bazelrc=y.rc --bazelrc=/dev/null --bazelrc=z.rc
- 已讀取
x.rc
和y.rc
。 - 由於先前的
/dev/null
,系統已忽略z.rc
。
- 已讀取
除了這個選用設定檔外,Bazel 也會搜尋全域弧線 檔案。詳情請參閱全球 bazelrc 章節。
.bazelrc
語法和語意
例如所有 UNIX "rc"檔案,.bazelrc
檔案是採用一行程式碼的文字檔案
文法系統會忽略開頭為 #
(註解) 的空白行和行。每項
行包含一系列的字詞,根據
做為 Bourne 殼層的
匯入
開頭為 import
或 try-import
的行數特殊:使用這些線條載入
其他「rc」檔案。如要指定與工作區根目錄相關的路徑,
寫入 import %workspace%/path/to/bazelrc
。
import
和 try-import
的差異在於,如果 Bazel 要求故障
缺少 import
的檔案 (或無法讀取),但由於 try-import
沒有這個檔案
檔案。
匯入優先順序:
- 匯入檔案中的選項優先順序高於先前指定的選項 匯入陳述式
- 匯入陳述式之後所指定的選項,優先順序將高於 匯入檔案中的選項
- 之後匯入的檔案選項會優先於先前匯入的檔案。
預設值
bazelrc 的大部分行都會定義預設選項值。每個管道的第一個字詞 線條會指定套用這些預設值的時機:
startup
:啟動選項 (位於指令之前),相關說明 位置:bazel help startup_options
。common
:適用於所有 Bazel 指令的選項。command
:Bazel 指令,例如選項的build
或query
或這些選項也適用於從 指定的指令(例如,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
- 下列指令繼承自 (且更具體)
build
:test
、run
、clean
、mobile-install
、info
、print_action
、config
、cquery
和aquery
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 檔案:
- 位於 etc/bazel.bazelrc
的系統架構檔案。
- 位於 $workspace/tools/bazel.rc
的工作區架構檔案。
- 本機架構檔案,本機檔案,位置:$HOME/.bazelrc
這裡列出的每個 bazelrc 檔案都有對應的標記 (例如 --nosystem_rc
、--noworkspace_rc
、--nohome_rc
)。您也可以傳遞 --ignore_all_rc_files
啟動選項,讓 Bazel 忽略所有 Bazel。