本頁面說明各種 Bazel 指令都能使用的選項
例如 bazel build
、bazel run
和 bazel test
這個網頁是隨播廣告
複製到 Build with Bazel 中 Bazel 的指令清單。
目標語法
部分指令 (例如 build
或 test
) 可以對目標清單執行作業。他們
使用的語法比標籤更有彈性
指定要建構的目標。
選項
以下各節將說明在升級期間可使用的選項
建構應用程式在說明指令中使用 --long
時,一行
說明訊息會提供關於含義、型別和
每個選項的預設值。
大部分選項只能指定一次。多次指定時, 最後,當個例項獲勝。可以多次指定的選項如下 透過線上說明獲得「可能用於多次」的文字。
套件位置
--package_path
這個選項會指定要搜尋的目錄集 找出特定套件的 BUILD 檔案。
Bazel 會搜尋套件路徑來尋找套件。這是冒號 分離的 bazel 目錄清單,每個目錄都是 部分來源樹狀結構。
使用 --package_path
選項指定自訂套件路徑:
% bazel build --package_path %workspace%:/some/other/root
套件路徑元素可用三種格式指定:
- 如果第一個字元是
/
,則路徑為絕對路徑。 - 如果路徑的開頭為
%workspace%
,則會採用相對路徑 拖曳到最近的 Bazel 目錄。 舉例來說,如果您的工作目錄 為/home/bob/clients/bob_client/bazel/foo
,則 套件路徑中的字串%workspace%
已展開 至/home/bob/clients/bob_client/bazel
。 - 其餘內容則會擷取至工作目錄。
這通常不是您想做的事
而使用 Bazel 工作區下方的目錄 Bazel 可能會意外行為。
舉例來說,如果您使用 package-path 元素
.
, 然後使用 cd 取代目錄/home/bob/clients/bob_client/bazel/foo
,套件 都會從/home/bob/clients/bob_client/bazel/foo
目錄內。
如果您使用非預設套件路徑,請在 Bazel 設定檔 (用於便利)。
Bazel 不需要將任何套件匯入 當前目錄,因此您可以從空的 Terraform 建立建構作業 工作區 (如果能在其他位置找到所有必要套件) 。
範例:從空白用戶端建構
% mkdir -p foo/bazel % cd foo/bazel % touch WORKSPACE % bazel build --package_path /some/other/path //foo
--deleted_packages
這個選項會指定一份以半形逗號分隔的清單,其中包含 Bazel 的套件 應考慮刪除,而不要嘗試從任何目錄載入 。這可用來模擬刪除套件,而 但實際上是刪除物件
檢查時發生錯誤
這些選項可控制 Bazel 的錯誤檢查和/或警告。
--[no]check_visibility
如果將這個選項設為 False,瀏覽權限檢查會降低為警告。 這個選項的預設值為 true,因此在預設狀態下 檢查已完成。
--output_filter=regex
--output_filter
選項只會顯示建構和編譯
警告。如果目標
符合指定的規則運算式及其執行成功
會捨棄輸出和標準錯誤
以下是這個選項的部分常見值:
`--output_filter='^//(first/project|second/project):'` | 顯示指定套件的輸出內容。 |
`--output_filter='^//((?!(first/bad_project|second/bad_project):).)*$'` | 不顯示指定套件的輸出內容。 |
`--output_filter=` | 顯示所有內容。 |
`--output_filter=DONT_MATCH_ANYTHING` | 不顯示任何內容。 |
工具旗標
這些選項可控管 Bazel 將哪些選項傳送到其他工具。
--copt=cc-option
這個選項會採用要傳遞至編譯器的引數。 每次叫用引數都會傳遞至編譯器 預先處理、編譯和/或組合 C、C++ 或 組合器程式碼連結時不會傳送。
這個選項可以重複使用。例如:
% bazel build --copt="-g0" --copt="-fpic" //foo
會在不使用偵錯資料表的情況下編譯 foo
程式庫,
獨立程式碼
--host_copt=cc-option
這個選項採用引數,要傳遞至來源檔案編譯器
會透過主機設定編譯而成類似於
--copt
選項,但僅適用於
主機設定。
--host_conlyopt=cc-option
這個選項採用引數,要傳遞至 C 來源檔案編譯器
會透過主機設定編譯而成類似於
--conlyopt
選項,但僅適用於
並套用到主機設定
--host_cxxopt=cc-option
這個選項採用引數,要傳遞至 C++ 來源檔案的編譯器
會透過主機設定編譯而成類似於
--cxxopt
選項,但僅適用於
主機設定。
--host_linkopt=linker-option
這個選項採用引數,要傳遞至來源檔案的連結器
會透過主機設定編譯而成類似於
--linkopt
選項,但僅適用於
主機設定
--conlyopt=cc-option
這個選項會使用引數,在編譯 C 來源檔案時將引數傳遞至編譯器。
這與 --copt
類似,但只適用於 C 編譯,
而非 C++ 編譯或連結這樣您就能傳遞 C 特定選項
(例如 -Wno-pointer-sign
) 使用 --conlyopt
。
--cxxopt=cc-option
這個選項會採用引數,並將該引數傳遞至編譯器, 編譯 C++ 來源檔案。
這與 --copt
類似,但僅適用於 C++ 編譯。
而非 C 編譯或連結所以您可以傳遞 C++ 特定選項
(例如 -fpermissive
或 -fno-implicit-templates
) 使用 --cxxopt
。
例如:
% bazel build --cxxopt="-fpermissive" --cxxopt="-Wno-error" //foo/cruddy_code
--linkopt=linker-option
這個選項會採用引數,並在連結時傳遞至編譯器。
這與 --copt
類似,但僅適用於連結、
未經編譯。因此,您可以傳遞僅適用於
於連結時 (例如 -lssp
或 -Wl,--wrap,abort
)
使用 --linkopt
。例如:
% bazel build --copt="-fmudflap" --linkopt="-lmudflap" //foo/buggy_code
建構規則也可以在屬性中指定連結選項。這個選項的 設定一律會優先採用另請參閱 cc_library.linkopts
--strip (always|never|sometimes)
這個選項會決定 Bazel 是否會從以下來源移除偵錯資訊:
使用 -Wl,--strip-debug
選項叫用連結器,藉此擷取所有二進位檔和共用程式庫。
--strip=always
表示一律會移除偵錯資訊。
--strip=never
表示絕對不會移除偵錯資訊。
如果 --compilation_mode
為移除值,則預設值 --strip=sometimes
表示移除
為 fastbuild
。
% bazel build --strip=always //foo:bar
會編譯目標,同時從所有產生的 二進位檔。
Bazel 的 --strip
選項會與舊版的 --strip-debug
選項相對應:
只會移除偵錯資訊如果您因故想要移除「所有」符號
而不只是偵錯符號,您需要使用舊的 --strip-all
選項。
只要將 --linkopt=-Wl,--strip-all
傳遞至 Bazel 即可。其他注意事項
請注意,設定 Bazel 的 --strip
標記會覆寫
--linkopt=-Wl,--strip-all
,因此建議您只設定其中一項。
如果只要建構單一二進位檔,並想要移除所有符號,您也可以
傳遞 --stripopt=--strip-all
並明確建構
目標的 //foo:bar.stripped
版。如
--stripopt
,這會在最終二進位檔晚於
,而不是在所有版本的連結動作中去除。
--stripopt=strip-option
這是在生成時傳送至 strip
指令的其他選項
*.stripped
二進位檔。預設
為 -S -p
。這個選項可以重複使用。
--fdo_instrument=profile-output-dir
--fdo_instrument
選項可讓您產生
當 FDO (根據回饋最佳化) 設定檔輸出結果時
內建的 C/C++ 二進位檔如果是 GCC,提供的引數會做為
.gcda 檔案個別物件目錄樹狀結構的目錄前置字串
包含每個 .o 檔案的設定檔資訊
產生設定檔資料樹狀結構後,
必須壓縮並提供給
--fdo_optimize=profile-zip
可啟用 FDO 最佳化編譯的 Bazel 選項。
對於 LLVM 編譯器,引數也是原始 LLVM 設定檔所在的目錄
資料檔案已傾印。例如 --fdo_instrument=/path/to/rawprof/dir/
。
不可同時使用「--fdo_instrument
」和「--fdo_optimize
」選項。
--fdo_optimize=profile-zip
--fdo_optimize
選項可讓您使用
執行 FDO (意見回饋) 個別物件的設定檔資訊
所採取的最佳化措施) 處理的流程。如果是 GCC,引數
您會看到包含先前產生的樹狀檔案結構的 ZIP 檔案
的 .gcda 檔案內含每個 .o 檔案的設定檔資訊。
或者,提供的引數可以指向自動設定檔 由副檔名 .afdo 識別。
針對 LLVM 編譯器,提供的引數應指向已建立索引的 LLVM llvm-profdata 工具準備的設定檔輸出檔案,應包含 .profdata 。
不可同時使用「--fdo_instrument
」和「--fdo_optimize
」選項。
--[no]output_symbol_counts
啟用後,每個 C++ 執行檔二進位檔的黃金叫用連結都會輸出
符號計數檔案 (透過 --print-symbol-counts
金色)
選項)。針對每個連結器輸入,檔案會記錄
以及二進位中使用的符號數量。
這項資訊可用於追蹤不必要的連結依附性。
符號計數檔案會寫入二進位檔的輸出路徑,路徑名稱如下
[targetname].sc
。
這個選項預設為停用。
--java_language_version=version
這個選項會指定 Java 來源的版本。例如:
% bazel build --java_language_version=8 java/com/example/common/foo:all
,且僅允許與 Java 8 規格相容的建構項目。
預設值為 11。-->
可能的值包括:8、9、10、11、14 和 15,並可使用
使用 default_java_toolchain
註冊自訂 Java 工具鍊。
--tool_java_language_version=version
這是用於建構工具的 Java 語言版本,用於建立在建構期間執行的工具。 預設值為 11。
--java_runtime_version=version
這個選項會指定用於執行程式碼及執行測試的 JVM 版本。例如:
% bazel run --java_runtime_version=remotejdk_11 java/com/example/common/foo:java_application
從遠端存放區下載 JDK 11,並透過該存放區執行 Java 應用程式。
預設值為 localjdk
。
可能的值包括:localjdk
、localjdk_version
、
remotejdk_11
和remote_jdk17
。
您可以使用
local_java_repository
或 remote_java_repostory
存放區規則。
--tool_java_runtime_version=version
用來執行建構期間必要工具的 JVM 版本。
預設值為 remotejdk_11
。
--jvmopt=jvm-option
這個選項可讓選項引數傳遞至 Java VM。可用於 呼叫單一大型引數,或對個別引數多次呼叫。例如:
% bazel build --jvmopt="-server -Xms256m" java/com/example/common/foo:all
會使用伺服器 VM 啟動所有 Java 二進位檔 VM 的啟動堆積大小至 256 MB
--javacopt=javac-option
這個選項可讓選項引數傳遞至 javac。可用於 呼叫單一大型引數,或對個別引數多次呼叫。例如:
% bazel build --javacopt="-g:source,lines" //myprojects:prog
系統會使用 javac 預設偵錯資訊重新建構 java_binary (而非 bazel 預設值)。
在 Bazel 內建的預設選項之後 javac 和個別規則選項前面。最後一個規格 任何 javac 勝出選項都會勝出。javac 的預設選項如下:
-source 8 -target 8 -encoding UTF-8
--strict_java_deps (default|strict|off|warn|error)
這個選項會控制 javac 檢查是否缺少直接依附元件。 Java 目標必須明確宣告所有直接使用的目標為 依附元件這個標記會指示 javac 判斷實際使用的 jar 檔案 檢查各個 Java 檔案的型別;如果不是輸出內容,則會警告/錯誤 當前目標的直接依附元件。
off
表示停用檢查功能。warn
表示 javac 會產生標準 Java 警告 為每個缺少的直接依附元件輸入[strict]
。default
、strict
和error
全部 平均而言,Javac 會產生錯誤,而不是警告,導致 ,則無法建構任何遺漏的直接依附元件。 這是未指定標記時的預設行為。
建構語意
這些選項會影響建構指令和/或輸出檔案內容。
--compilation_mode (fastbuild|opt|dbg)
(-c)
--compilation_mode
選項 (通常會縮短為 -c
,
特別是 -c opt
) 會使用 fastbuild
、dbg
的引數
或 opt
,影響各種 C/C++ 程式碼產生作業
例如最佳化層級
偵錯資料表Bazel 為每個項目使用不同的輸出目錄
因此您可以在沒有特定模式的情況下切換不同模式
不必「每次」完成完整重新建構。
fastbuild
表示盡可能快速建構: 會產生最少的偵錯資訊 (-gmlt -Wl,-S
),且不會最佳化。此為預設值。注意:系統不會設定-DNDEBUG
。dbg
是指在啟用偵錯功能的情況下進行建構 (-g
), ,您可以使用 gdb (或其他偵錯工具)。opt
是指版本已啟用最佳化功能,且 停用assert()
通話功能 (-O2 -DNDEBUG
)。 在opt
模式下不會產生偵錯資訊 除非您同時傳遞--copt -g
--cpu=cpu
這個選項會指定要使用的目標 CPU 架構 建構期間的二進位檔編譯。
--action_env=VAR=VALUE
指定執行所有動作時可用的一組環境變數。
您可以指定變數名稱;在此情況下,值取自
叫用環境或 name=value
組合,用來設定獨立於
叫用環境。
這個 --action_env
標記可以多次指定。如果將值指派給
變數跨多個 --action_env
旗標,最新作業將獲勝。
--experimental_action_listener=label
experimental_action_listener
選項會指示 Bazel 使用
由 label 指定的 action_listener
規則詳情到
將 extra_actions
插入建構圖表。
--[no]experimental_extra_action_top_level_only
如果此選項設為 true,
--experimental_action_listener
指令
系統只會為頂層目標排定委刊項選項。
--experimental_extra_action_filter=regex
experimental_extra_action_filter
選項會指示 Bazel 執行
篩選一組要排定extra_actions
的目標。
這個標記僅適用於
--experimental_action_listener
標記。
系統預設會extra_actions
在
預先排定執行目標的時程。
「--experimental_extra_action_filter
」會將時段限制為:
擁有者標籤與指定值相符的 extra_actions
規則運算式
以下範例會限制 extra_actions
的排程
僅適用於擁有者標籤包含「/bar/」的動作:
% bazel build --experimental_action_listener=//test:al //foo/... \ --experimental_extra_action_filter=.*/bar/.*
--host_cpu=cpu
這個選項會指定應採用何種 CPU 架構名稱 來建立託管工具
--fat_apk_cpu=cpu[,cpu]*
用於建構 C/C++ 程式庫的 CPU 在deps
android_binary
規則。其他 C/C++ 規則不會受到影響。舉例來說
cc_library
出現在 android_binary
規則的遞移 deps
中,
cc_binary
規則,cc_library
至少會建構兩次:
針對每個使用 --fat_apk_cpu
指定的 CPU
android_binary
規則,一次針對指定的 CPU
--cpu
是 cc_binary
規則。
預設為 armeabi-v7a
。
系統會建立一個 .so
檔案,並封裝在
使用 --fat_apk_cpu
來指定各個 CPU.so
檔案名稱
前置字串為 android_binary
規則的名稱加上「lib」。舉例來說,假設名稱是
android_binary
為「foo」,則檔案為 libfoo.so
。
--per_file_copt=[+-]regex[,[+-]regex]...@option[,option]...
存在時,只要 C++ 檔案含有標籤,或是執行路徑與任一納入規則運算式相符的執行路徑,
但與任何排除運算式不相符時,將會建立
與指定的選項搭配使用標籤比對會使用標籤的標準格式
(例如 //package
:label_name
)。
執行路徑是工作區目錄的相對路徑,包含基礎名稱 (包括副檔名)。以及所有平台相依的前置字元。
比對產生的檔案 (例如 genrule 輸出內容)
Bazel 只能使用執行路徑。在此情況下,規則運算式的開頭不應是「//」
因為這不符合任何執行路徑套件名稱的使用方式如下:
--per_file_copt=base/.*\.pb\.cc@-g0
。這個做法會與
.pb.cc
檔案位於名為 base
的目錄下。
這個選項可以重複使用。
無論使用哪種編譯模式,系統都會套用這個選項。舉例來說
使用 --compilation_mode=opt
編譯並選擇性編譯
或已停用最佳化功能的檔案。
注意事項:如果某些檔案是使用偵錯符號來選擇性編譯,
就可能在連結過程中移除如要防止這種情況發生
--strip=never
。
語法:[+-]regex[,[+-]regex]...@option[,option]...
其中
regex
代表可以加上前置字元的規則運算式
會識別包含模式的 +
,並使用 -
識別
排除模式。option
代表要傳遞的任意選項
C++ 編譯器如果選項包含 ,
,就必須加上引號
\,
。選項也可以包含 @
,因為只有第一個
@
是用來將規則運算式與選項分開。
範例:
--per_file_copt=//foo:.*\.cc,-//foo:file\.cc@-O0,-fprofile-arcs
將 -O0
和 -fprofile-arcs
選項新增至指令
//foo/
中所有 .cc
檔案的 C++ 編譯器行 (file.cc
除外)。
--dynamic_mode=mode
決定是否以動態方式連結 C++ 二進位檔,並與 建構規則的 linkstatic 屬性。
模式:
auto
:轉譯為平台相關模式;default
代表 Linux,off
代表 cygwin。default
:允許 bazel 選擇是否要動態連結。 詳情請參閱靜態連結 可能不準確或不適當fully
:動態連結所有目標。這會加快 ,並縮減產生的二進位檔大小。off
:連結以下項目中的所有目標: 「幾乎是靜態的」模式。 如果已在連結選擇中設定-static
,目標將變更為完全靜態。
--fission (yes|no|[dbg][,opt][,fastbuild])
啟用 Fission、 這個程式會將 C++ 偵錯資訊寫入專屬的 .dwo 檔案 (而不是 .o 檔案), 否則就會跳出去可大幅減少連結的輸入大小,並縮短連結時間。
設為 [dbg][,opt][,fastbuild]
時 (例如:
--fission=dbg,fastbuild
),網路已啟用
指定的編譯模式這適合用於 bazelrc
可以管理叢集設定,像是節點
資源調度、安全性和其他預先設定項目設為 yes
時,系統會啟用開箱功能
如果設為 no
,就會停用開箱功能
預設值為 no
。
--force_ignore_dash_static
如果設定此標記,則任何 -static
選項的連結選擇
系統會忽略 cc_*
規則 BUILD 檔案。這項功能僅供
C++ 強化版本的解決方法。
--[no]force_pic
啟用後,所有 C++ 編譯都會產生與位置無關的程式碼 (「-fPIC」), 連結更偏好使用 PIC 預先建構的程式庫,而非非 PIC 程式庫,而且連結會產生 位置獨立的可執行檔 (「-pie」)。已停用預設值。
--android_resource_shrinking
選擇是否要為 android_binary 規則執行資源縮減。設定 shrink_resources 屬性開啟 android_binary 規則;詳情請參閱該規則的說明文件預設為關閉。
--custom_malloc=malloc-library-target
如果有指定,請一律使用指定的 Malloc 實作項目,覆寫所有項目
malloc="target"
屬性,包括使用
預設值 (也就是不指定任何 malloc
)。
--crosstool_top=label
這個選項會指定 Crosstool 編譯器套件的位置
,在建構期間用於所有 C++ 編譯。Bazel 會考量
CROSSTOOL 檔案的位置,並透過該位置自動判斷
設定。--compiler
。
--host_crosstool_top=label
如未指定,Bazel 會使用 --crosstool_top
的值編譯
例如在建構期間執行的工具。這個標記的主要用途
那就是啟用跨平台程式碼編譯
--apple_crosstool_top=label
這個跨工具可用於編譯 C/C++ 規則的遞移性 deps
objc*、ios* 和 apple* 規則。針對這些目標,這個標記會覆寫
--crosstool_top
。
--android_crosstool_top=label
這個跨工具可用於編譯 C/C++ 規則的遞移性 deps
android_binary
規則。如果
就需要不同的跨工具預設值為使用 Crosstool
由 WORKSPACE 檔案中的 android_ndk_repository
規則產生。
另請參閱 --fat_apk_cpu
。
--compiler=version
這個選項會指定 C/C++ 編譯器版本 (例如 gcc-4.1.0
)
用於建構二進位檔的編譯作業如果您想
如為自訂跨工具建構,您應使用 CROSSTOOL 檔案,而不是
指定這個標記
--android_sdk=label
這個選項會指定 Android SDK/平台工具鍊 和 Android 執行階段程式庫,可用於建立任何與 Android 相關的 規則。
如果 android_sdk_repository
規則定義於 WORKSPACE 檔案
--java_toolchain=label
此選項會指定用來編譯 Java 的 java_toolchain 標籤 來源檔案。
--host_java_toolchain=label
如未指定,bazel 會使用 --java_toolchain
的值編譯
例如主機設定中的程式碼,例如用於建構期間執行的工具。這個標記的主要用途
那就是啟用跨平台程式碼編譯
--javabase=(label)
這個選項會設定基本 Java 安裝項目要用於 bazel run 的標籤。
bazel 測試,以及針對由 java_binary
和
java_test
規則。《JAVABASE
》和《JAVA
》
「廠牌」變數衍生自這個選項。
--host_javabase=label
這個選項會設定要在主機設定中使用的基本 Java 安裝標籤。 例如 JavaBuilder 和 Singlejar 等主機建構工具。
這不會選取用來編譯 Java 的 Java 編譯器
來源檔案。如要選取編譯器,您必須設定
--java_toolchain
選項。
執行策略
這些選項會影響 Bazel 執行建構作業的方式。 這些指令碼應該不會對輸出檔案造成任何顯著影響 產生的資訊這些物件的主要影響通常是 測試環境
--spawn_strategy=strategy
這個選項會控制指令執行的位置和方式。
standalone
會觸發指令做為本機子程序執行。此值為 已淘汰。請改用「local
」。sandboxed
會讓指令在本機電腦的沙箱中執行。 這需要將所有輸入檔案、資料依附性和工具列為直接srcs
、data
和tools
屬性的依附元件。 Bazel 預設會在支援沙箱執行作業的系統上啟用本機沙箱。local
會觸發指令做為本機子程序執行。worker
會使指令使用永久工作站 (如有) 執行。docker
會讓指令在本機電腦的 Docker 沙箱中執行。 必須安裝 Docker。remote
會從遠端執行指令;只有 已另外設定遠端執行程式
--strategy mnemonic=strategy
這個選項會控制指令執行的位置和方式,並覆寫 --spawn_strategy (和 --genrule_strategy 搭配 mnemonic Genrule)詳情請見 支援的 --spawn_strategy 策略和影響
--strategy_regexp=<filter,filter,...>=<strategy>
這個選項會指定應採用何種策略來執行含有說明的指令
與特定 regex_filter
配對。詳情請見
--per_file_copt
regex_filter 比對。詳情請見
支援的 --spawn_strategy
策略和影響
系統會使用最後一個與說明相符的 regex_filter
。這個選項會覆寫
以及指定策略的其他標記
- 範例:
--strategy_regexp=//foo.*\\.cc,-//foo/bar=local
是指使用local
策略 (如果說明符合 //foo.*.cc 而非 //foo/bar)。 - 範例:
--strategy_regexp='Compiling.*/bar=local' --strategy_regexp=Compiling=sandboxed
執行 'Compiling //foo/bar/baz'執行sandboxed
策略,但反轉 順序則會使用local
來執行 - 範例:
--strategy_regexp='Compiling.*/bar=local,sandboxed'
分 '編譯 //foo/bar/baz'採用local
策略,並改回使用sandboxed
表示失敗。
--genrule_strategy=strategy
這是已淘汰的 --strategy=Genrule=strategy
簡寫。
--jobs=n
(-j)
這個選項需要整數引數,指定 連線期間應並行執行的工作數量 建構執行階段
--progress_report_interval=n
Bazel 會定期針對尚未執行的工作輸出進度報告
已完成 (例如長時間執行的測試)。這個選項會將
回報頻率,進度將每 n
輸出一次
秒內請求驗證碼。
預設值為 0,表示遞增演算法:第一個 報告會在 10 秒後列印,再 30 秒 每分鐘都會回報一次進度
當 bazel 使用遊標控制項時,會依照
--curses
,進度會每秒回報一次。
--local_{ram,cpu}_resources resources or resource expression
這些選項會指定本機資源數量 (以 MB 為單位的 RAM 和 CPU 邏輯核心數量)
將建構與測試活動安排在本機執行時,Bazel 可以考量這一點。拍攝
整數,或選擇關鍵字 (HOST_RAM 或 HOST_CPUS),後面會選擇性加上 [-|*
float]
(例如 --local_cpu_resources=2
、--local_ram_resources=HOST_RAM*.5
、
--local_cpu_resources=HOST_CPUS-1
)。
這些標記各自獨立;您可以設定一個選項,或兩者同時設定。根據預設,Bazel 會預估
例如本機系統設定中的 RAM 和 CPU 核心數量。
--[no]build_runfile_links
這個選項預設為啟用,可指定執行檔案是否
測試和二進位檔的符號連結應建立在輸出目錄中。
使用 --nobuild_runfile_links
是非常實用的做法
驗證所有目標是否都能編譯,而不會產生負擔
可用來建構執行檔案樹狀結構
執行測試 (或應用程式) 時,其執行時間資料
依附元件集合在同一處在 Bazel 的
輸出樹狀結構這種樹通常源自於
對應的二進位檔或測試
在測試執行期間,如要存取執行檔案,可以使用
$TEST_SRCDIR/workspace/packagename/filename
。
執行檔案樹狀結構可確保測試可存取所有檔案
只需宣告一個依附性變更者:
根據預設,執行檔案樹狀結構會藉由建構一組
的符號連結。隨著連結組合的增加
確實執行這項作業的成本,對某些大型版本來說
對整體建構時間的貢獻尤其重要
每項測試 (或應用程式) 都需要自己的 Runfile 樹狀結構。
--[no]build_runfile_manifests
這個選項預設為啟用,可指定執行檔案資訊清單。
都應該寫入輸出樹狀結構
停用此設定意味著 --nobuild_runfile_links
。
之所以在遠端執行測試時可以停用,這是因為執行檔案樹狀結構 透過記憶體內資訊清單遠端建立。
--[no]discard_analysis_cache
啟用這個選項後,Bazel 就會捨棄分析快取 因而釋出其他記憶體 (約 10%)。執行階段。 缺點是,後續的漸進式建構速度會較慢。其他參考資訊 記憶體節省模式。
--[no]keep_going
(-k)
如同 GNU Make,建構的執行階段會在首次建構 時發生錯誤。有時您可以嘗試建構 即使發生錯誤,也會盡量多保留一點。這個選項可啟用 該行為經過指定後,建構作業會嘗試 建構成功的必要條件 會忽略錯誤。
雖然這個選項通常與
也會影響分析階段:如果有多個目標
但只有部分可以
成功分析之後,建構作業就會停止並出現錯誤
除非指定了 --keep_going
,在這種情況下,
將進入執行階段
--[no]use_ijars
這個選項會改變 java_library
指定目標的方式
而是由 Bazel 編譯而成而不是使用輸入的
java_library
:適用於編譯的依附元件
java_library
目標,Bazel 會建立介面 jar
只包含非私人成員 (公開
保護和預設 (套件) 存取方法和欄位) 並使用
介面 jar 來編譯相依目標如此一來
以免在變更只對
類別的方法主體或私人成員。
--[no]interface_shared_objects
這個選項會啟用「介面共用物件」,進而將二進位檔與 其他共用程式庫仍取決於共用物件的介面。 而非實作內容當 Bazel 只會變更實作項目 可避免重新建立依賴於已變更的共用資料庫 無謂。
輸出選項
這些選項可決定要建構或測試的內容。
--[no]build
這個選項會啟動建構的執行階段。是 預設為啟用。將其關閉時,執行階段會 而且只有前兩階段發生載入和分析時。
這個方法有助於驗證 BUILD 檔案,以及偵測 也不會實際建構任何項目。
--[no]build_tests_only
如有指定,Bazel 只會建構執行 *_test
所需的項目
以及 test_suite
項規則因其原因而未遭到篩除
size [尺寸]、
timeout、
標記,或
語言。
如有指定,Bazel 會忽略指令列中指定的其他目標。
這個選項預設為停用,且 Bazel 會建構所有內容
包括被篩除的 *_test
和 test_suite
規則
進行測試。這很實用
「bazel test --build_tests_only foo/...
」可能無法偵測到所有版本
foo
樹狀結構發生故障情形。
--[no]check_up_to_date
這個選項會導致 Bazel 不會執行建構作業,因此只會檢查 指出所有指定的目標是否為最新。如果是的話 成功完成。但是,如果有檔案 日期,而非建構,而是回報錯誤並建構 失敗。這個選項可用於判斷建構作業 比來源編輯內容更近的時間 (例如預先提交的內容) 檢查),而不會產生建構費用。
另請參閱 --check_tests_up_to_date
。
--[no]compile_one_dependency
編譯引數檔案的單一依附元件。這對於使用者 透過 IDE 檢查來源檔案的語法,例如重新建構單一 並依來源檔案及早偵測錯誤 可在編輯/建構/測試週期內達成這個引數會影響 非旗標引數會解譯:每個引數都必須是 或是與目前作業相關的純文字檔案名稱 目錄,建立了一個根據每個來源檔案名稱的規則。適用於
C++ 和 Java 我們會優先選擇位於相同語言空間的規則。適用對象 如果有多項規則擁有相同偏好設定,那麼優先度最高的規則 已選取 BUILD 檔案。明確命名的目標模式,不會 參照來源檔案會導致錯誤。
--save_temps
--save_temps
選項會使編譯器的暫時輸出內容
已儲存。包括 .s 檔案 (組合器程式碼)、.i (預先處理的 C) 和 .ii
(預先處理的 C++) 檔案。這些輸出內容通常在偵錯時相當實用。只有溫度
為指令列指定的一組目標產生產生的代碼。
--save_temps
標記目前僅適用於 cc_* 規則。
為確保 Bazel 能輸出其他輸出檔案的位置,請確認
您的 --show_result n
設定夠高了
--build_tag_filters=tag[,tag]*
如有指定,Bazel 只會建構至少含有一個必要標記的目標 (如有指定) 且沒有任何排除的標記。版本標記 篩選器是以以逗號分隔的標記關鍵字清單指定, 前面加上「-」符號,藉此表示排除的標記。必要標記也可以 開頭有「+」] 號。
執行測試時,Bazel 會忽略測試目標的 --build_tag_filters
。
系統也會建構並執行
即使不符合這個篩選條件如要避免建立這些項目,請篩選
測試目標時,您可以使用 --test_tag_filters
或明確排除這些目標。
--test_size_filters=size[,size]*
如有指定,Bazel 會測試 (或執行於 --build_tests_only
時建構)
) 只會測試具有指定大小的測試目標。測試尺寸篩選器
是以逗號分隔的清單,列出允許的測試大小值 (小、
中、大或龐大),在開頭加上「-」這個符號代表
排除的測試大小。例如:
% bazel test --test_size_filters=small,medium //foo:all和
% bazel test --test_size_filters=-large,-enormous //foo:all
只會測試 //foo 中的小型和中型測試。
根據預設,系統不會套用測試大小篩選。
--test_timeout_filters=timeout[,timeout]*
如有指定,Bazel 會測試 (或執行於 --build_tests_only
時建構)
的測試目標),則只會有指定逾時的測試目標。測試逾時篩選器
是以逗號分隔的清單,列出允許的測試逾時值 (短
中等、長或永恆),也可選擇前方加上「-」這個符號代表
排除的測試逾時。請參閱 --test_size_filters
例如語法範例
根據預設,系統不會套用測試逾時篩選。
--test_tag_filters=tag[,tag]*
如有指定,Bazel 會測試 (或執行於 --build_tests_only
時建構)
時) 只會包含至少一個必要代碼的測試目標
(如有指定) 且沒有任何排除的標記。測試代碼
篩選器是以以逗號分隔的標記關鍵字清單指定,
前面加上「-」符號,藉此表示排除的標記。必要標記也可以
開頭有「+」] 號。
例如:
% bazel test --test_tag_filters=performance,stress,-flaky //myproject:all
將會測試標記為 performance
或
stress
標記,但「沒有」使用 flaky
標記。
根據預設,系統不會套用測試代碼篩選功能。請注意,您也可以篩選
測試的 size
和 local
標記
。
--test_lang_filters=lang[,lang]*
使用官方 *_test
規則指定語言的測試語言清單 (以半形逗號分隔)
(如需完整清單,請參閱建構百科全書)。每項
您也可以在前面加上「-」可指定排除
語言。各語言使用的名稱應與
指定 *_test
規則的語言前置字元,例如
cc
、java
或 sh
。
如有指定,Bazel 會測試 (或執行於 --build_tests_only
時建構)
時,也只能指定指定語言的測試目標。
例如:
% bazel test --test_lang_filters=cc,java foo/...
只會測試 C/C++ 和 Java 測試 (使用
cc_test
和 java_test
規則)
在foo/...
期間
% bazel test --test_lang_filters=-sh,-java foo/...
將會執行 foo/...
中的所有測試,但
sh_test
和 java_test
測試。
根據預設,系統不會套用測試語言篩選。
--test_filter=filter-expression
指定篩選器,讓測試執行器挑選一部分測試, 備用資源系統會建構叫用中指定的所有目標,但實際情況取決於 只能執行部分運算式;在某些情況下 測試方法
filter-expression 的具體解讀為
以及負責執行測試的測試架構它可能是水龍頭
子字串或規則運算式--test_filter
是便利的
傳遞不同的 --test_arg
篩選器引數
但並非所有架構都支援此架構
詳細程度
這些選項可控制 Bazel 輸出內容的詳細程度 或其他記錄檔
--explain=logfile
這個選項需要檔案名稱引數,因此,
bazel build
執行階段的依附元件檢查工具
說明每個建構步驟:執行的原因。
但必須確定的是我們會寫下說明
logfile,
如果發生非預期的重新建構情況,這個選項可協助您
瞭解原因。新增至 .bazelrc
,即可
所有後續版本都會記錄,然後檢查記錄檔
當您看到執行步驟未正常執行時。這個選項
就會對效能產生小幅不良影響
以備不時之需
--verbose_explanations
這個選項會提高生成解釋的詳細程度 --explain 選項啟用時。
具體來說,如果啟用詳細解釋 而且系統也重新建構輸出檔案 變更元件時,說明檔案中的輸出內容 包含新指令的完整詳細資訊 (至少 指令)。
如果使用這個選項,系統可能會大幅增加
產生的解釋檔案
--explain
。
如果未啟用 --explain
,
--verbose_explanations
不會有任何作用。
--profile=file
這個選項會使用檔案名稱引數,導致 Bazel 寫入
將資料剖析成檔案接著,您可以使用
bazel analyze-profile
指令。您可以運用建構設定檔
瞭解 Bazel 的 build
指令花費時間在何處。
--[no]show_loading_progress
這個選項會讓 Bazel 輸出套件載入的進度 訊息。如果停用,系統就不會顯示訊息。
--[no]show_progress
此選項會顯示進度訊息;開啟時間: 預設值。如果停用,進度訊息會遭到隱藏。
--show_progress_rate_limit=n
這個選項會使 bazel 每 n
秒最多顯示一則進度訊息。
其中 n 為實數。
這個選項的預設值為 0.02,表示 bazel 會限制進度
每 0.02 秒傳送給一則訊息
--show_result=n
這個選項會控制結果資訊的列印作業
bazel build
指令中的說明根據預設
Bazel 會顯示訊息,指出是否指定建構目標
是否成功將目標保持在最新狀態
目標建立的輸出檔案清單。如有多個
已指定 個目標,不顯示結果資訊。
雖然結果資訊可能有助於您建立單一的單張圖片
指定目標或少數目標,適用於大型版本 (例如整個頂層項目)
這樣資訊可能會讓人眼花撩亂又分心
這個選項可讓您加以控制--show_result
必須使用整數引數,以達到指定的數量上限
,應列印完整結果資訊。根據預設
這個值會是 1。超過這個門檻,沒有任何結果資訊
但只會在個別指定目標中顯示因此 0 會導致
資訊通常遭到隱藏,如果價值極高
一律顯示結果
如果使用者經常需要
就能交替建立一小群目標 (例如
測試期間) 和大量目標群組
(例如建立新工作區或執行
迴歸測試)。如果情況為另一個情況,結果資訊是
而後者則較不實用與所有情況相同
選項,可透過以下方式以隱含方式指定:
.bazelrc
檔案。
檔案會印出,方便您複製及貼上 才能執行建構的執行檔「最新」 或「失敗」指令碼可輕易剖析每個目標的訊息。 推動建構作業
--sandbox_debug
這個選項會導致 Bazel 在針對動作使用沙箱機制時,輸出額外的偵錯資訊 此選項也會保留沙箱目錄,讓動作能檢視檔案 資源執行期間的深入檢查
--subcommands
(-s
)
這個選項會讓 Bazel 的執行階段顯示完整的指令列 。
>>>>> # //examples/cpp:hello-world [action 'Linking examples/cpp/hello-world'] (cd /home/johndoe/.cache/bazel/_bazel_johndoe/4c084335afceb392cfbe7c31afee3a9f/bazel && \ exec env - \ /usr/bin/gcc -o bazel-out/local-fastbuild/bin/examples/cpp/hello-world -B/usr/bin/ -Wl,-z,relro,-z,now -no-canonical-prefixes -pass-exit-codes -Wl,-S -Wl,@bazel-out/local_linux-fastbuild/bin/examples/cpp/hello-world-2.params)
在可能的情況下,指令會以 Bourne 殼層相容的語法顯示
以便複製並貼到殼層命令提示字元中
(為了防止您的殼層從
cd
和 exec
呼叫;請務必複製這些項目!)
不過,有些指令會在 Bazel 內部實作,例如:
建立符號連結樹狀結構沒有指令列可顯示。
可能需要傳遞 --subcommands=pretty_print
才能列印
將指令的引數視為清單,而非單行。這可能會
可讓較長的指令列更易於閱讀
另請參閱下方的 --verbose_failures。
如需以適用於工具的格式記錄檔案子指令,請參閱 --execution_log_json_file 和 --execution_log_binary_file.
--verbose_failures
這個選項會讓 Bazel 的執行階段顯示完整的指令列 執行失敗的指令這對於偵錯 以及失敗的建構作業
失敗的指令會以 Bourne 殼層相容的語法顯示,適合 將複製貼上至殼層提示
工作區狀態
使用這些選項來「附加」Bazel 建構的二進位檔:將其他資訊嵌入
例如原始碼控管修訂版本或其他工作區相關資訊。別擔心!您可以使用
此機制設有支援 stamp
屬性的規則,例如
genrule
、cc_binary
,以及執行其他操作。
--workspace_status_command=program
這個標記可讓您指定 Bazel 在每次建構前執行的二進位檔。這項計畫可以檢舉 工作區狀態的相關資訊,例如目前的原始碼控管修訂版本。
旗標的值必須是原生程式的路徑。在 Linux/macOS 中,這可以是任何執行檔。 在 Windows 中,這必須是原生二進位檔,通常是「.exe」、「.bat」或「.cmd」檔案。
程式應將零或多個鍵/值組合列印為標準輸出,每行一個項目, 然後以 0 結束 (否則建構失敗)。鍵名可以是任何名稱,但 請使用大寫字母和底線。鍵名稱後方的第一個空格與 值。這個值是線條的其他部分 (包括其他空白字元)。無論金鑰或 值可能會橫跨好幾行。金鑰不得重複。
Bazel 將金鑰分成兩個值區:「stable」和「揮發性」(名稱包括「stable」和 「揮發性」有點違反直覺,所以請不要太仔細思考)。
Bazel 接著會將鍵/值組合寫入兩個檔案:
bazel-out/stable-status.txt
包含鍵名稱開頭為STABLE_
的所有鍵和值bazel-out/volatile-status.txt
包含其餘的鍵及其值
合約如下:
「穩定」金鑰值應該很少變更如果內容
bazel-out/stable-status.txt
變更,Bazel 就會撤銷依附動作執行的操作。於 換句話說,如果穩定的鍵值發生變更,Bazel 就會重新執行戳記動作。 因此,穩定狀態不該包含時間戳記等資訊,因為它們會全部變更 並讓 Bazel 能在每次建構作業時重新執行蓋章動作Bazel 一律會輸出以下穩定的金鑰:
BUILD_EMBED_LABEL
:--embed_label
的值BUILD_HOST
:執行 Bazel 的主機名稱BUILD_USER
:Bazel 執行的使用者名稱
「揮發性」金鑰數值可能會經常變動Bazel 會預期這些物件隨時都會變更,例如 也會正式更新
bazel-out/volatile-status.txt
檔案。為避免 不過,隨時都要重新執行戳記動作,Bazel 會假定易變檔案 變更。換句話說,如果易變狀態檔案是唯一含有 Bazel 將不會撤銷依賴該變數的動作。如果動作還有其他輸入內容 而 Bazel 就會重新執行該動作,接著動作會看到更新後的揮發性更新 但如果只是易變狀態變更,就不會導致動作失效。Bazel 一律會輸出以下易變金鑰:
BUILD_TIMESTAMP
:自 Unix Epoch 時間 (即值) 以來的建構時間,以秒為單位System.currentTimeMillis()
除以一千)FORMATTED_DATE
:建構時間,格式為yyyy MMM d HH mm ss EEE
(例如:世界標準時間 2023 年 6 月 2 日 1 44 29 日週五)。
在 Linux/macOS 上,您可以將 --workspace_status_command=/bin/true
傳送至
停用擷取工作區狀態,因為 true
未執行任何動作 (離開)
且不會顯示任何輸出內容。在 Windows 上,您可以傳遞 MSYS 的 true.exe
路徑
以達到相同效果
如果工作區狀態指令因任何原因失敗 (離開非零),建構作業就會失敗。
使用 Git 在 Linux 上的程式範例:
#!/bin/bash echo "CURRENT_TIME $(date +%s)" echo "RANDOM_HASH $(cat /proc/sys/kernel/random/uuid)" echo "STABLE_GIT_COMMIT $(git rev-parse HEAD)" echo "STABLE_USER_NAME $USER"
使用 --workspace_status_command
和穩定的狀態檔案傳遞這個程式的路徑
會包含 STABLE 行,而易變狀態檔案將包含其餘的程式碼行。
--[no]stamp
這個選項搭配 stamp
規則屬性可控制是否要
在二進位檔中嵌入建構資訊。
您可以使用
stamp
屬性。詳情請參閱「版本百科全書」。時間
規則設定 stamp = -1
(*_binary
規則的預設值),這個選項
用於判斷是否已啟用戳記。
Bazel 絕對不會處理針對主機設定建構的二進位檔。
無論這個選項或 stamp
屬性為何。如果規則設有 stamp =
0
(*_test
規則的預設值),無論結果為何,系統都會停用戳記
--[no]stamp
。指定 --stamp
時,系統不會強制重新建立目標 (如有)
完全沒有變更依附元件
設定 --nostamp
通常適合提升建構效能,因為這樣
可降低輸入波動並最大化建構快取。
平台
使用這些選項控制主機和目標平台,以設定版本的運作方式,並 控管 Bazel 規則可用的執行平台和工具鍊。
--platforms=labels
平台規則的標籤,用來描述
--host_platform=label
說明主機系統的平台規則標籤。
--extra_execution_platforms=labels
可做為執行平台來執行動作的平台。 您可以使用精確目標或目標模式來指定平台。這些 系統會先考量平台,再由 register_execution_platforms()。
--extra_toolchains=labels
工具鍊解析時要考量的工具鍊規則。工具鍊 可以由確切的目標或目標模式指定這些工具鍊 會考量到 register_toolchains()。
--toolchain_resolution_debug=regex
如果工具鍊類型相符,則列印偵錯資訊,並在尋找工具鍊
規則運算式可使用半形逗號分隔多個規則運算式。規則運算式可以是
以 -
開頭。這可能有助於開發人員
,其原因是缺少工具鍊,導致 Bazel 或 Starlark 規則進行偵錯。
其他
--flag_alias=alias_name=target_path
便利的旗標,用於將較長的 Starlark 建構設定繫結至更短的名稱。如要 請參閱 Starlark 設定。
--symlink_prefix=string
變更系統產生的便利符號連結的前置字串。
符號連結前置字串的預設值是 bazel-
,
會建立 bazel-bin
、bazel-testlogs
和
bazel-genfiles
。
如果基於任何原因無法建立符號連結,系統會顯示警告訊息 但建構仍視為成功我們要用 這可讓您在唯讀目錄中建立容器 寫入權限任何印有資訊的路徑 建構作業結束時的訊息只會使用 如果符號連結指向預期值,則符號連結相對簡短形式 位置;換句話說,您可以只依據這些原則的正確性 路徑。
這個選項的部分常見值:
不建立符號連結:
--symlink_prefix=/
會導致 Bazel 建立或更新任何符號連結,包括bazel-out
和bazel-<workspace>
符號連結。選擇這個選項即可完全禁止建立符號連結。減少干擾:
--symlink_prefix=.bazel/
會導致 Bazel 建立 在隱藏目錄.bazel
中稱為bin
(等) 的符號連結。
--platform_suffix=string
在設定簡稱中加入後置字串,用於判斷 輸出目錄如果將這個選項設為不同的值,檔案就會 例如針對不同目錄的建構作業,改善快取命中率 否則模型會互相干擾輸出檔案 以便進行比較
--default_visibility=(private|public)
用於測試 bazel 預設瀏覽權限變更的臨時標記。不適用於一般用途 但已記錄為完整性清酒。
--[no]use_action_cache
這個選項預設為啟用。如果停用,Bazel 就不會使用本機動作快取。 停用本機動作快取可節省記憶體和磁碟空間進行清理,但將會 漸進式建構作業,速度會較慢
--starlark_cpu_profile=_file_
這個標記的值是檔案名稱,會導致 Bazel 收集 所有 Starlark 執行緒 CPU 用量的統計資料 並以 pprof 格式寫入設定檔 新增至指定檔案
這個選項有助於找出 因為運算過多,導致載入和分析速度變慢。例如:
$ bazel build --nobuild --starlark_cpu_profile=/tmp/pprof.gz my/project/... $ pprof /tmp/pprof.gz (pprof) top Type: CPU Time: Feb 6, 2020 at 12:06pm (PST) Duration: 5.26s, Total samples = 3.34s (63.55%) Showing nodes accounting for 3.34s, 100% of 3.34s total flat flat% sum% cum cum% 1.86s 55.69% 55.69% 1.86s 55.69% sort_source_files 1.02s 30.54% 86.23% 1.02s 30.54% expand_all_combinations 0.44s 13.17% 99.40% 0.44s 13.17% range 0.02s 0.6% 100% 3.34s 100% sorted 0 0% 100% 1.38s 41.32% my/project/main/BUILD 0 0% 100% 1.96s 58.68% my/project/library.bzl 0 0% 100% 3.34s 100% main
如要在不同檢視畫面中查看相同資料,請嘗試使用 pprof
指令 svg
、
web
和list
。
使用 Bazel 進行發布
在開發期間,軟體工程師都會使用 Bazel 以及由發布工程師準備用於部署的二進位檔 Google 提供端對端開發平台 可將實驗階段的機器學習模型轉換至正式版環境本節提供發布提示清單 可協助工程師使用 Bazel
重要選項
使用 Bazel 進行發布建構作業時,也會出現與其他指令碼相同的問題 執行建構作業詳情請參閱 透過指令碼呼叫 Bazel。請特別留意下列選項 強烈建議使用:
這些選項也很重要:
--package_path
--symlink_prefix
: 針對多項設定管理建構作業 方便您區分每個版本 搭配專屬 ID,例如「64bit」對比「32 位元」。這個選項 區分bazel-bin
(等) 符號連結。
執行測試
如要使用 bazel 建構及執行測試,請輸入 bazel test
,後面加上
測試目標的名稱
根據預設,這個指令會同時執行建構和測試
活動,建立所有指定的目標 (包括任何非測試
並測試
立即*_test
和test_suite
目標
因此測試執行
與建築物交錯顯示這麼做通常會產生
也有助於我們瞭解
「bazel test
」的選項
--cache_test_results=(yes|no|auto)
(-t
)
如果這個選項設為「auto」(預設),而 Bazel 只會在 符合下列條件者:
- Bazel 會偵測測試或其依附元件的變更
- 該測試標示為
external
- 透過
--runs_per_test
要求多次測試執行作業 - 測試失敗
如果設為「no」,所有測試都會無條件執行。
如果設為「是」,快取行為將與自動
但可以快取失敗的測試失敗
--runs_per_test
。
啟用這個選項的使用者
對方的 .bazelrc
檔案可能會找到
縮寫 -t
(開啟) 或 -t-
(關閉)
方便您覆寫特定執行作業的預設值。
--check_tests_up_to_date
這個選項會指示 Bazel 不要執行測試,而只是檢查及回報 快取結果。如果有任何測試尚未經過 或者您的測試結果已經過時 (例如 原始碼或建構選項有所變更時,Bazel 就會回報 錯誤訊息 (「測試結果不是最新」) 狀態為「NO STATUS」(如果啟用色彩輸出,會以紅色標示),並且會傳回 非零的結束代碼
這個選項也意味著
[--check_up_to_date](#check-up-to-date)
行為。
這個選項很適合用於預先提交檢查。
--test_verbose_timeout_warnings
此選項會指示 Bazel 在測試逾時發生逾時的情況時,明確警告使用者 遠比測試的實際執行時間長得多。測試時 逾時狀態應設為不易運作,且 逾時逾時會隱藏意料之外的真實問題。
舉例來說,如果測試通常在一兩分鐘內執行,則不應 ETERNAL 或 LONG 的逾時值,但這遠不等於過高。
這個選項可協助使用者決定良好的逾時值,或 以及檢查現有的逾時值。
--[no]test_keep_going
根據預設,所有測試都會執行完成。如果停用這個旗標
但會在任何非傳遞的測試中取消建構。後續的建構步驟
系統不會執行測試叫用,而且會取消執行中的叫用。
請勿同時指定 --notest_keep_going
和 --keep_going
。
--flaky_test_attempts=attempts
這個選項可指定測試的嘗試次數上限
也會失敗一開始失敗但最終的測試
成功的項目在測試摘要中會顯示為 FLAKY
。沒錯,
但在找出 Bazel 結束程式碼時,請考慮傳送
或通過測試的總數如果測試失敗所有允許嘗試,即為
就算是失敗
預設為 (當未指定或設為
預設),一般測試只允許一次嘗試。
3 代表已設定 flaky
屬性的測試規則。您可以
整數值,覆寫測試嘗試次數上限。Bazel 允許
最多嘗試 10 次,以免系統遭到濫用。
--runs_per_test=[regex@]number
這個選項可指定每次測試的執行次數。所有語言 測試執行作業視為個別測試 (備用功能) 只會套用至這些模組)。
執行失敗的目標狀態取決於
--runs_per_test_detects_flakes
標記:
- 否則,任何失敗的執行作業都會導致整個測試失敗。
- 如果存在且兩次執行作業來自同一個資料分割,則傳回 PASS 和 FAIL,測試 狀態就會是很緩慢的 (除非有其他失敗的執行作業導致 失敗)。
如果指定單一數字,所有測試都會重複執行。
或者,您也可以使用語法
regex@number。這會將 --runs_per_test
的效果限制在目標內
與規則運算式相符 (--runs_per_test=^//pizza:.*@4
會執行所有測試
//pizza/
4 次以下)。
這個 --runs_per_test
形式可以指定超過一次。
--[no]runs_per_test_detects_flakes
如果指定這個選項 (預設並未指定),Bazel 就會偵測發生問題
透過 --runs_per_test
測試資料分割。單一資料分割的一或多項執行作業時
對同一個資料分割傳遞作業失敗,且執行一或多項執行作業時,目標
與這個旗鼓相當不悅如果未指定,指定目標就會回報
檢查失敗狀態
--test_summary=output_style
指定測試結果摘要的顯示方式。
short
會顯示每個測試的結果及名稱 。此為預設值 值。terse
,例如short
,但時間較短:僅限列印 未通過測試的相關資訊detailed
會列印失敗的每個測試案例,而非 個別測試即可系統會省略測試輸出檔案名稱。none
不會列印測試摘要。
--test_output=output_style
指定測試輸出內容的顯示方式:
summary
會顯示每項測試是否通過的摘要 失敗。也會顯示失敗測試的輸出記錄檔名稱。摘要 會在建構結束時顯示 (在建構期間 只是測試開始、通過或失敗時的簡單進度訊息)。 此為預設行為。errors
會從失敗的測試傳送合併的 stdout/stderr 輸出內容 只在測試完成後立即傳入 stdout, 同步測試中的測試結果不會彼此交錯。 根據上方的摘要輸出內容,顯示建構作業的摘要。all
與errors
相似,但會輸出以下項目的輸出內容:streamed
會串流每項測試的 stdout/stderr 輸出內容,位於 即時。
--java_debug
這個選項會使 Java 測試的 Java 虛擬機器等待來自
開始測試之前,先執行符合 JDWP 規定的偵錯工具。這個選項表示 --test_output=streamed
。
--[no]verbose_test_summary
系統預設會啟用這個選項,這會導致測試時間和其他
測試摘要資訊 (例如測試嘗試次數)。如果
已指定「--noverbose_test_summary
」,測試摘要將會
只包含測試名稱、測試狀態和快取測試指標
請盡量將長度保持在 80 個半形字元以內
--test_tmpdir=path
為本機執行的測試指定暫存目錄。每項測試
在此目錄中的個別子目錄中執行。目錄會
每個 bazel test
指令的開頭都會清理。
根據預設,bazel 會將這個目錄置於 Bazel 輸出基本目錄之下。
--test_timeout=seconds
或--test_timeout=seconds,seconds,seconds,seconds
使用指定數量,覆寫所有測試的逾時值。 設為新的逾時值。如果只提供一個值, 皆用於所有測試逾時類別。
或者,您也可以提供四個以半形逗號分隔的值,指定 個別的逾時時間、中度、長效測試和永恆等測試 順序)。 不論是哪一種形式,任何測試大小都會以 0 或負值表示 將由所指定逾時類別的預設逾時換成 按照撰寫測試頁面定義。 根據預設,Bazel 預設會在所有測試中使用這些逾時 根據測試的大小推斷出逾時上限;無論 默示或明確設定
明確指出逾時類別與 優先順序接收的值會與 大小廣告代碼所以我們要測試「small」大小這會宣告「long」逾時將 有效逾時時間設為「大」沒有明確說明的測試 逾時。
--test_arg=arg
將指令列選項/旗標/引數傳遞至每個測試程序。這個
選項可多次傳遞多個引數。例如 --test_arg=--logtostderr --test_arg=--v=3
。
--test_env=variable=_value_
或--test_env=variable
指定必須插入測試的其他變數
每次測試的環境如果未指定 value
繼承自用於啟動 bazel test
的殼層環境
指令
您可運用
System.getenv("var")
(Java)、getenv("var")
(C 或 C++)、
--run_under=command-prefix
這會指定測試執行工具的前面插入前置字串 測試指令 command-prefix 會使用 Bourne 殼層分割為字詞 符記化規則,字詞清單之後會附加至 即將執行的指令
如果第一個字詞是完整標籤 (開頭為
//
) 是建構的。接著標籤會替換成
加在指令前的對應可執行位置
與其他字詞一起執行時
注意事項:
- 用於執行測試的 PATH 可能與環境中的 PATH 不同。
因此,您需要為
--run_under
使用絕對路徑 指令 (command-prefix 中的第一個字詞)。 stdin
未連線,因此--run_under
無法用於互動式指令
範例:
--run_under=/usr/bin/strace --run_under='/usr/bin/strace -c' --run_under=/usr/bin/valgrind --run_under='/usr/bin/valgrind --quiet --num-callers=20'
測試選項
如「輸出選項選項」底下所述。 您可以依「大小」篩選測試 timeout、 標記,或 語言。便利性 一般名稱篩選器 為測試執行器篩選引數
「bazel test
」的其他選項
語法和其他選項完全相同
bazel build
。
執行中的執行檔
bazel run
指令類似 bazel build
,但有以下例外:
是用於建構「並執行」單一目標以下是一般的練習:
% bazel run java/myapp:myapp -- --arg1 --arg2 Welcome to Bazel INFO: Loading package: java/myapp INFO: Loading package: foo/bar INFO: Loading complete. Analyzing... INFO: Found 1 target... ... Target //java/myapp:myapp up-to-date: bazel-bin/java/myapp:myapp INFO: Elapsed time: 0.638s, Critical Path: 0.34s INFO: Running command line: bazel-bin/java/myapp:myapp --arg1 --arg2 Hello there $EXEC_ROOT/java/myapp/myapp --arg1 --arg2
bazel run
與直接叫用的相似,但不完全相同
至於 Bazel 建立的二進位檔及其行為,則視應用程式是否
叫用即可使用的二進位檔
如果二進位檔並未進行測試,目前的工作目錄會是 二進位檔的執行檔案樹狀結構
二進位檔進行測試時,目前的工作目錄是 exec 根目錄
本信善意是為了複製環境測試
執行然而,模擬並非完美無缺,而且測試具有多個
無法以這種方式執行 (
可使用「--test_sharding_strategy=disabled
」指令列選項
解決這個問題)
下列額外環境變數也適用於二進位檔:
BUILD_WORKSPACE_DIRECTORY
:工作區的根層級,其中含有BUILD_WORKING_DIRECTORY
:目前的工作目錄,其中 Bazel 的執行位置為
這些字串可用於 例如,在指令列中的 使用起來更方便
「bazel run
」的選項
--run_under=command-prefix
這與 --run_under
選項
bazel test
(請參閱上方)、
但僅適用於 bazel
run
執行的指令,而非 bazel test
執行的測試
而且無法在標籤下執行
從 Bazel 篩選記錄輸出
使用 bazel run
叫用二進位檔時,Bazel 會顯示來自 Bazel 的記錄輸出
呼叫來源的二進位檔如要降低記錄檔的雜訊
使用 --ui_event_filters
並限制 Bazel 本身的輸出內容
--noshow_progress
旗標。
例如:bazel run --ui_event_filters=-info,-stdout,-stderr --noshow_progress //java/myapp:myapp
執行測試
bazel run
也可執行測試二進位檔,這類二進位檔
執行測試,相當接近
撰寫測試。請注意,
以這種方式執行測試時,--test_*
引數會生效,但
--test_arg
清理建構輸出內容
clean
指令
Bazel 使用 clean
指令,類似於 Make。
系統會刪除所有已執行建構設定的輸出目錄
或由此 Bazel 執行個體建立的整個工作樹狀結構
執行 Bazel 執行個體,並重設內部快取。如果執行時未包含
指令列選項,然後是所有設定的輸出目錄
進行清理作業
提醒您,每個 Bazel 執行個體都與單一工作區相關聯,因此
clean
指令會刪除您已完成的所有版本中的所有輸出內容
該 Bazel 執行個體與該 Bazel 執行個體搭配使用
完全移除 Bazel 建立的整個工作樹狀結構
例如,您可以指定 --expunge
選項時間
使用 --expunge
執行,清理指令
移除除了建構作業以外的整個輸出基礎樹狀結構
輸出會包含 Bazel 建立的所有暫存檔案。此外,
清理完成後,會停止 Bazel 伺服器,這等同於 shutdown
指令。舉例來說
清除 Bazel 執行個體的所有磁碟和記憶體追蹤記錄
請詳細說明:
% bazel clean --expunge
或者,您可以使用
--expunge_async
。您可以放心叫用 Bazel 指令
並繼續執行非同步清除作業。
clean
指令主要是以
為不再需要的工作區收回磁碟空間。
Bazel 的漸進式重新建構作業可能不會
完美無缺,因此 clean
可用於恢復一致的
狀態。
Bazel 的設計是要解決這些問題
這些錯誤需要優先修正如果發生以下情況:
無論如何找出錯誤的漸進式版本、提交錯誤報告,並在工具中回報錯誤
而非使用 clean
查詢依附元件圖表
Bazel 包含的查詢語言可用來詢問 建構期間使用的依附元件圖。系統會使用查詢語言 這兩個指令:query 和 cquery。生成式 AI 和 兩個指令是查詢在載入階段後執行 cquery 會在分析階段執行。這些工具 對許多軟體工程任務而言毫無意義。
查詢語言是以 代數運算如有需要,
Bazel 查詢參考資料。 請參考該文件 範例,以及查詢專用指令列選項。
查詢工具接受多個指令列
如果有需要 SQL 指令的分析工作負載
則 BigQuery 可能是最佳選擇--output
會選取輸出格式。
--[no]keep_going
(預設為停用) 會導致查詢
工具來繼續處理錯誤;這種行為可能是
如果不可接受的結果不完整,則停用此選項。
--[no]tool_deps
選項、
系統會預設啟用,因此非目標設定中的依附元件會包含在
查詢運作時使用的依附關係圖。
--[no]implicit_deps
選項 (預設為啟用)
隱含依附元件,要包含在查詢作業所在的依附元件圖表中。一個
隱含依附元件是指 BUILD 檔案中未明確指定的依附元件
而是 bazel 加上的
例如:「在 BUILD 檔案中顯示定義位置 (在 BUILD 檔案中) 所有測試在 PEBL 樹狀結構中建構所有測試所需的 Genrules。」
bazel query --output location 'kind(genrule, deps(kind(".*_test rule", foo/bar/pebl/...)))'
查詢動作圖表
aquery
指令可讓您查詢建構圖中的動作。
它會在以事後分析設定的目標圖上運作,並且公開
有關動作、構件及其關聯的資訊。
這項工具接受多種指令列選項。
--output
會選取輸出格式。預設輸出格式
(text
) 是人類可讀的格式,proto
或 textproto
適用於
機器可讀取的格式
值得注意的是,查詢指令會在一般 Bazel 建構作業之上執行,並沿用
建構期間可用的選項組合
可支援的函式也適用於
query
,但siblings
、buildfiles
和
tests
。
詳情請參閱「動作圖查詢」。
其他指令和選項
help
help
指令提供線上說明。根據預設
會顯示可用指令和說明主題的摘要,如
使用 Bazel 建構。
指定引數會顯示系統提供特定服務的詳細說明
主題。大部分主題都是 Bazel 指令,例如 build
或query
,但還有一些其他說明主題
沒有回應的指令
--[no]long
(-l
)
根據預設,bazel help [topic]
只會列印
主題相關選項的摘要。如果
指定了 --long
選項,代表類型、預設值
以及每個選項的完整說明
shutdown
您可以使用 shutdown
停止 Bazel 伺服器處理程序
指令這個指令會讓 Bazel 伺服器在執行時立即結束
會變為閒置 (例如,在完成任何版本或
指令中的指令)。詳情請參閱
用戶端/伺服器實作:
Bazel 伺服器會在閒置逾時後自行停止,因此這個指令 很少需要但如果使用指令碼 已知特定工作區不會再發生任何建構作業。
「shutdown
」接受一張
選項 --iff_heap_size_greater_than _n_
需要整數引數 (以 MB 為單位)。如有指定,則會關閉
不超過已使用的記憶體數量。這是
很適合用於啟動大量建構作業的指令碼
Bazel 伺服器中的流失問題可能會導致叢集在
執行條件式重新啟動便會先佔此條件
info
info
指令會輸出多個與
執行 Bazel 伺服器執行個體
或特定建構設定
(用於驅動建構的指令碼可能會使用這些內容)。
info
指令也允許一個 (選用)
引數,也就是下方清單中其中一個鍵的名稱。
在此情況下,bazel info key
只會列印
就會產生該鍵的值(這在
編寫 Bazel 指令碼,因為這樣就不必插入結果
到 sed -ne /key:/s/key://p
:
與設定無關的資料
release
:這個 Bazel 的發布標籤 執行個體,或稱「開發版本」如未推出 二進位檔案。workspace
是基本工作區的絕對路徑 目錄。install_base
:安裝的絕對路徑 目前使用者由此 Bazel 執行個體使用的目錄。Bazel 會在這個目錄下安裝其內部必要執行檔。output_base
:基本輸出內容的絕對路徑 這個 Bazel 執行個體目前使用的目錄 工作區組合Bazel 將一切從頭開始 輸出至這個目錄下execution_root
:執行作業的絕對路徑 位於 output_base 之下的根目錄中。這個目錄是所有檔案的根目錄 並能正常運作 找出這些指令如果工作區目錄可寫入, 名為「bazel-<workspace>
」的符號連結 放在這裡,並指向這個目錄output_path
:輸出的絕對路徑 目錄,實際上是在用於所有檔案的執行根目錄下 結果。如果工作區目錄是 名稱為bazel-out
的符號連結可寫入 移到這個目錄server_pid
:Bazel 伺服器的程序 ID 上傳資料集之後,您可以運用 AutoML 自動完成部分資料準備工作server_log
:Bazel 伺服器偵錯記錄檔的絕對路徑。 此檔案包含長期內所有指令的偵錯資訊 Bazel 伺服器,主要是供 Bazel 開發人員和使用者使用。command_log
:指令記錄檔的絕對路徑。 這包含最新資料的交錯式 stdout 和 stderr 串流 Bazel 指令請注意,執行bazel info
會覆寫 內容,因為之後它就會成為最新的 Bazel 指令。 但是,除非您要求變更 變更--output_base
的設定或--output_user_root
個選項。used-heap-size
,committed-heap-size
,max-heap-size
:回報各種 JVM 堆積大小 參數。分別使用的記憶體、目前使用的記憶體 確保 JVM 可從系統使用 可能的分配數量gc-count
、gc-time
:累計計數 自此 Bazel 伺服器啟動以來的垃圾收集,以及所花費的時間 以便執行。請注意,這些值不會在每次啟動時重設 建構應用程式package_path
:以冒號分隔的路徑清單,符合 已透過 bazel 搜尋包裹。格式與--package_path
建構指令列引數。
例如:Bazel 伺服器的程序 ID。
% bazel info server_pid 1285
設定專屬資料
這些資料可能會受到傳遞的設定選項影響
給bazel info
,為期
例如 --cpu
、--compilation_mode
依此類推。info
指令接受所有指令
控管依附元件的選項
因為這些部分會決定
建構作業的輸出目錄、編譯器選擇等
bazel-bin
、bazel-testlogs
、bazel-genfiles
:回報 由bazel-*
每個版本都有所在位置儘管如此 基本工作區目錄中建立的bazel-*
符號連結, 成功建構應用程式不過,如果 workspace 目錄是唯讀狀態 無法建立bazel-*
符號連結。使用 由「bazel info
」所回報的值,而不是假設 將更加可靠- 完整
「廠牌」環境。如果
--show_make_env
標記是 則目前設定的「Make」指令中的所有變數都已指定環境 (例如CC
、GLIBC_VERSION
等)。 以下是使用$(CC)
存取的變數 或 BUILD 檔案中的varref("CC")
語法。
範例:目前設定的 C++ 編譯器。
這是「Make」中的 $(CC)
變數環境
所以需要 --show_make_env
旗標
% bazel info --show_make_env -c opt COMPILATION_MODE opt
範例:目前設定的 bazel-bin
輸出目錄
此外還會從 0 自動調整資源配置
您完全不必調整資源調度設定即使在下列情況中
因故無法建立 bazel-bin
符號連結
(例如,從唯讀目錄建構)。
% bazel info --cpu=piii bazel-bin /var/tmp/_bazel_johndoe/fbd0e8a34f61ce5d491e3da69d959fe6/execroot/io_bazel/bazel-out/piii-opt/bin % bazel info --cpu=k8 bazel-bin /var/tmp/_bazel_johndoe/fbd0e8a34f61ce5d491e3da69d959fe6/execroot/io_bazel/bazel-out/k8-opt/bin
version
和--version
版本指令會顯示已建構 Bazel 的版本詳細資料 二進位檔案,包括建立時所在的變更清單和日期。 因此在判斷您是否 Bazel,或者您在回報錯誤時一些有趣的值 是:
changelist
:該版本的變更清單 已釋出 Bazel。label
:這個 Bazel 的發布標籤 執行個體,或稱「開發版本」如未推出 二進位檔案。這項功能非常實用,
bazel --version
,如果沒有其他引數,輸出的輸出內容會與
bazel version --gnu_format
,但可能會啟動潛在的副作用
能否提供 Bazel 伺服器
或將伺服器封存解壓縮bazel --version
的執行來源
而且不需要工作區目錄
mobile-install
mobile-install
指令會將應用程式安裝至行動裝置。
目前僅支援搭載 ART 的 Android 裝置。
詳情請參閱 bazel 行動安裝。
以下是支援的選項:
--incremental
如果設定此參數,Bazel 會嘗試逐步安裝應用程式,
上次建構後已經變更的部分無法更新資源
從 AndroidManifest.xml
、原生程式碼或 Java 參照
存取這些資源 (例如 Class.getResource()
參照的資源)。如果這些
所以請務必省略這個選項與 Bazel 的精神相反
而且受到 Android 平台的限制
,告訴使用者該指令何時足夠,
需要使用者完整安裝時
如果您使用搭載 Marshmallow 以上版本的裝置,請考慮
--split_apks
標記。
--split_apks
是否使用分割 APK 來安裝及更新裝置上的應用程式。
僅適用於搭載 Marshmallow 以上版本的裝置。請注意,
--incremental
標記
而不需要使用 --split_apks
。
--start_app
在安裝後以乾淨狀態啟動應用程式。等同於 --start=COLD
。
--debug_app
等待偵錯工具附加完成,才能在安裝完成後啟動應用程式。
等同於 --start=DEBUG
。
--start=_start_type_
安裝應用程式後應如何啟動。支援的 _start_type_s 如下:
NO
未啟動應用程式。此為預設值。COLD
在安裝後從清除狀態啟動應用程式。WARM
針對增量安裝作業保留及還原應用程式狀態。DEBUG
會等待偵錯工具,然後以空白狀態啟動應用程式 安裝。
--adb=path
指出要使用的 adb
二進位檔。
系統預設會使用
--android_sdk
。
--adb_arg=serial
adb
的額外引數。這些位於變數中的子指令前方
通常用於指定要安裝至哪個裝置。
舉例來說,如要選取要使用的 Android 裝置或模擬器:
% bazel mobile-install --adb_arg=-s --adb_arg=deadbeef
將 adb
叫用為
adb -s deadbeef install ...
--incremental_install_verbosity=number
增量安裝的詳細程度。設為 1 即可啟用偵錯記錄 都會顯示在控制台中
dump
dump
指令會輸出
Bazel 伺服器的內部狀態。這項指令的用途是
主要用於 Bazel 開發人員,因此這個指令的輸出內容
如未指定,可能會有所變動。
根據預設,指令只會輸出說明訊息 可轉儲 Bazel 狀態的特定區域為了轉儲 內部狀態,至少必須指定一個選項。
以下是支援的選項:
--action_cache
傾印動作快取內容。--packages
傾印套件快取內容。--skyframe
會傾印內部 Bazel 依附元件圖表的狀態。--rules
會為每個規則和切面類別傾印規則摘要, 包括計數和操作次數這包括原生和 Starlark 規則。 如果已啟用記憶體追蹤以及記憶體用量--skylark_memory
轉儲 a 將 .gz 檔案與 pprof 相容的 .gz 檔案至指定路徑。 你必須啟用記憶體追蹤,這項功能才能正常運作。
記憶體追蹤
部分 dump
指令需要追蹤記憶體。如要開啟這項功能,
套用至 Bazel:
--host_jvm_args=-javaagent:$BAZEL/third_party/allocation_instrumenter/java-allocation-instrumenter-3.3.0.jar
--host_jvm_args=-DRULE_MEMORY_TRACKER=1
java-agent 會在
third_party/allocation_instrumenter/java-allocation-instrumenter-3.3.0.jar
,所以請
請務必針對 Bazel 存放區的位置調整 $BAZEL
。
請別忘了針對每個指令,將這些選項傳送至 Bazel,否則伺服器會 重新啟動。
範例:
% bazel --host_jvm_args=-javaagent:$BAZEL/third_party/allocation_instrumenter/java-allocation-instrumenter-3.3.0.jar \ --host_jvm_args=-DRULE_MEMORY_TRACKER=1 \ build --nobuild <targets> # Dump rules % bazel --host_jvm_args=-javaagent:$BAZEL/third_party/allocation_instrumenter/java-allocation-instrumenter-3.3.0.jar \ --host_jvm_args=-DRULE_MEMORY_TRACKER=1 \ dump --rules # Dump Starlark heap and analyze it with pprof % bazel --host_jvm_args=-javaagent:$BAZEL/third_party/allocation_instrumenter/java-allocation-instrumenter-3.3.0.jar \ --host_jvm_args=-DRULE_MEMORY_TRACKER=1 \ dump --skylark_memory=$HOME/prof.gz % pprof -flame $HOME/prof.gz
analyze-profile
analyze-profile
指令會分析先前收集的資料
在建構期間使用 --profile
選項這項服務提供
分析建構執行作業或
指定的格式。
以下是支援的選項:
--dump
會在 人類可讀的格式不過 目前尚不支援其他格式。
如需格式詳細資料和使用說明,請參閱 分析效能疑難排解。
canonicalize-flags
canonicalize-flags
指令,取得 Bazel 指令的選項清單,並傳回
也可以產生 相同效果 的選項新的選項清單為標準網址。例如:
具有相同效果的兩個選項清單,會標準化為相同的新清單。
--for_command
選項可用來選擇
指令目前,只有 build
和 test
如下
支援。指定指令不支援的選項會造成錯誤。
例如:
% bazel canonicalize-flags -- --config=any_name --test_tag_filters="-lint" --config=any_name --test_tag_filters=-lint
啟動選項
本節說明的選項會影響 Java 的啟動程序 而且 Bazel 伺服器程序使用的虛擬機器 該伺服器處理的後續指令如果已有 且啟動選項不相符
本節說明的所有選項都必須使用
--key=value
或 --key value
語法。此外,這些選項必須放在 Bazel 名稱「之前」
指令使用 startup --key=value
即可在 .bazelrc
檔案中列出這些項目。
--output_base=dir
這個選項需要路徑引數,而該引數必須指定 可寫入目錄Bazel 會使用這個位置來寫入所有 輸出內容輸出底就是用戶端找到的索引鍵 執行 Bazel 伺服器變更輸出基礎後,就會變更伺服器 負責處理指令
根據預設,輸出基準來自使用者的登入名稱。
工作區目錄的名稱 (實際上是 MD5 摘要)
因此一般值看起來會像這樣:
/var/tmp/google/_bazel_johndoe/d41d8cd98f00b204e9800998ecf8427e
。
例如:
OUTPUT_BASE=/var/tmp/google/_bazel_johndoe/custom_output_base % bazel --output_base ${OUTPUT_BASE}1 build //foo & bazel --output_base ${OUTPUT_BASE}2 build //bar
在此指令中,兩個 Bazel 指令會並行執行 (因為
殼層 &
運算子),每個物件都會使用不同的 Bazel
伺服器執行個體 (因為輸出基礎不同)。
相對地,如果兩個指令都使用預設輸出基準,
那麼兩個要求就會傳送至相同的伺服器
依序處理:先建構 //foo
,然後
漸進式建構 //bar
。
--output_user_root=dir
指向建立輸出和安裝數的根目錄。目錄 必須不存在或為發出呼叫的使用者所有。過去 此權限允許指向多位使用者共用的目錄 但不再允許這允許這個方法一次 問題 #11100 已解決。
如果指定 --output_base
選項,系統會覆寫這項設定
並使用 --output_user_root
計算輸出底數。
安裝基本位置的計算依據
--output_user_root
,以及 Bazel 嵌入的 MD5 身分
二進位檔。
您可以使用 --output_user_root
選項
Bazel 所有輸出內容 (安裝數和輸出內容) 的替代基本位置
)。
--server_javabase=dir
指定 Bazel 本身在哪個 Java 虛擬機器中執行。值必須是 包含 JDK 或 JRE 的目錄。不應為標籤。 這個選項應出現在任何 Bazel 指令之前,例如:
% bazel --server_javabase=/usr/local/buildtools/java/jdk11 build //foo
這個標記「不會」影響 Bazel 子程序使用的 JVM,例如應用程式、測試、 工具等使用建構選項 --javabase 或 --host_javabase。
這個旗標先前已命名為 --host_javabase
(有時也稱為
「左側」--host_javabase
) 的名稱,但為了避免與
建構標記 --host_javabase (有時又稱為
「右側」--host_javabase
)。
--host_jvm_args=string
指定要傳遞至 Bazel 本身的 Java 虛擬機器的啟動選項 或任何可執行 Knative 的環境中這可用來設定堆疊大小,例如:
% bazel --host_jvm_args="-Xss256K" build //foo
這個選項可搭配個別引數使用多次。請注意, 因此應該很少需要設定這個旗標。您也可以傳遞以空格分隔的字串清單。 每個函式都會解讀為獨立的 JVM 引數,不過這項功能很快就會 已淘汰。
這「不會」影響 Google Cloud 使用的 JVM
應用程式、測試、工具等子程序。票證
用於執行 Java 程式的 JVM 選項,無論是由 bazel
run
執行,還是透過指令列執行,都應使用
--jvm_flags
引數
所有 java_binary
和 java_test
節目
聯絡。或者,您也可以使用 bazel test --test_arg=--jvm_flags=foo ...
進行測試。
--host_jvm_debug
此選項會使 Java 虛擬機器等待連線 舊版應用程式是以遵循 JDWP 規範的偵錯工具 呼叫 Bazel 本身的主要方法。這主要是 僅供 Bazel 開發人員使用
--autodetect_server_javabase
這個選項會使 Bazel 在啟動時自動搜尋已安裝的 JDK。
,如果無法使用內嵌的 JRE,即可改回使用已安裝的 JRE。
--explicit_server_javabase
可用於挑選明確的 JRE,以用於
以及如何執行 Bazel
--batch
批次模式會導致 Bazel 不使用 標準用戶端/伺服器模式,但會改為執行 Terraform 適用於單一指令的 Java 程序,因為這個程序較能預測 信號處理、工作控制和環境的相關語意 變數繼承,在 Chroot 監獄中執行 bazel 是必要的。
批次模式會在同一個 output_base 中保留適當的佇列語意。 也就是說,系統會按照順序處理同時叫用,不重疊。 若是批次模式 Bazel 在執行中伺服器的用戶端上執行, 在處理指令前終止伺服器
Bazel 在批次模式下或上述替代方案執行時,執行速度會較慢。 這是因為建構檔案快取會佔用記憶體, 而保留不變 因此,在需要注意效能的情況下,使用批次模式通常更有意義 重要性較低,例如持續建構
--max_idle_secs=n
這個選項會指定 Bazel 伺服器處理程序的時間長度 (以秒為單位)
應等待最後一個用戶端要求之後,再結束。
預設值為 10800 (3 小時)。--max_idle_secs=0
將會使
可無限期保留的 Bazel 伺服器程序。
叫用 Bazel 的指令碼可能會使用這個選項,確保
確保 Bazel 伺服器會在使用者的電腦上執行
其他元件就無法執行
舉例來說,預先提交的指令碼可能會為了
叫用 bazel query
,以確保使用者的待處理狀態
變更不會產生不必要的依附性不過,
使用者最近未在該工作區中使用過新版本
並不適合透過預先提交指令碼啟動 Bazel 伺服器
讓它在一整天內都處於閒置狀態
方法是指定 --max_idle_secs
因此指令碼可確保「如果」產生了新的
伺服器啟動時,該伺服器會立即結束,但如果
先前已有伺服器在執行中,該伺服器會繼續執行
直到其閒置時間為止。當然
伺服器的閒置計時器就會重設。
--[no]shutdown_on_low_sys_mem
如果啟用,並將 --max_idle_secs
設為正數,
等建構伺服器閒置一段時間之後,在系統進入閒置狀態時關閉伺服器
因此記憶體容量不足僅適用於 Linux。
除了執行與 max_idle_secs 相對應的閒置檢查之外,建構伺服器還會 在伺服器閒置一段時間後,開始監控可用的系統記憶體。 如果可用的系統記憶體嚴重不足,伺服器將結束。
--[no]block_for_lock
如果啟用,Bazel 會等待其他持有 待伺服器鎖定後再開始進度。如果停用,Bazel 因無法立即取得鎖定,並造成 繼續。
開發人員可能可以在預先提交檢查時使用,避免長時間等候 相同用戶端中的另一個 Bazel 指令
--io_nice_level=n
設定 0 到 7 之間的等級,盡可能提高 IO 排程。0 是最高的優先順序 7 是最低價。預期排程器最多只能遵循優先順序 4。 系統會忽略負值。
--batch_cpu_scheduling
請為 Bazel 使用 batch
CPU 排程功能。這項政策適合用於
不具有互動性,但不想降低價值。
請參閱「man 2 sched_setscheduler」。這項政策可能會用於更好的系統
卻會產生 Bazel 處理量的費用。
其他選項
--[no]announce_rc
控制 Bazel 在何時 啟動中。(啟動選項無條件公布)。
--color (yes|no|auto)
這個選項可決定 Bazel 是否會使用顏色醒目顯示 容器的輸出內容
如果這個選項設為 yes
,就會啟用顏色輸出功能。
如果將這個選項設為 auto
,Bazel 只會在下列情況中使用顏色輸出:
輸出內容會傳送至終端機,而 TERM 環境變數
設為 dumb
、emacs
或 xterm-mono
以外的值。
如果這個選項設為 no
,就會停用色彩輸出。
無論是輸出至終端機,還是
也就是 TERM 環境變數的設定。
--config=name
從以下位置選取其他設定專區:
rc 檔案;目前command
的價格
如果有相關章節,該區塊也會從 command:name
中提取選項。可以是
從數個設定部分新增旗標擴充欄位可參照其他
定義 (例如可鏈結擴充)。
--curses (yes|no|auto)
這個選項可決定 Bazel 是否會使用遊標控制項
。這有助於減少捲動資料
精簡且易於閱讀的 Bazel 輸出內容串流。搭配
--color
。
如果將這個選項設為 yes
,則會啟用遊標控制項。
如果將這個選項設為 no
,則會停用遊標控制項。
如果將這個選項設為 auto
,則會使用遊標控制項。
請在與 --color=auto
相同的條件下啟用。
--[no]show_timestamps
如有指定,系統就會為由 SDK 產生的每則訊息加上時間戳記 Bazel 用於指定訊息顯示時間。