Bazel 詞彙表

回報問題 查看來源 夜間 7.2 7.1 7.0 6.5 6.4

動作

在建構期間執行的指令,例如呼叫 Artifacts 做為輸入項目,並產生其他成果做為輸出內容。 包含指令列引數、動作金鑰、環境等中繼資料 變數和宣告的輸入/輸出構件

另請參閱: 規則說明文件

動作快取

磁碟快取,將已執行動作的對應關係儲存至 輸出內容快取金鑰稱為「動作鍵」。A 罩杯 也就是 Bazel 成效增幅模型的核心元件快取儲存在 因此在 Bazel 伺服器重新啟動後仍然有效。

動作圖表

記憶體內的動作構件 讀取及生成這些動作圖表中可能包含 來源檔案 (例如檔案系統) BUILD 檔案中未提及的中間/最終成果。製作時間 在分析階段執行期間執行期間使用 階段

動作圖表查詢 (查詢)

可查詢建構動作查詢工具。 這樣就能分析建構規則如何轉換為 實際作業版本

快捷操作鍵

動作的快取金鑰。根據動作中繼資料計算 可能包含要在動作、編譯器標記、程式庫中執行的指令 根據要執行的動作而定。讓 Bazel 能快取或 徹底使個別動作失效。

分析階段

建構的第二個階段。處理目標圖表 會在 BUILD 檔案中指定,以便產生記憶體內動作 圖表,用來決定 執行階段。這就是規則 實作程序會受評估

構件

來源檔案或產生的檔案。也可以是檔案目錄,名稱為 「樹狀構件」

構件可能是輸入多項動作的輸入內容,但只有由 最多一個動作

檔案目標相對應的成果可以透過 標籤。

切面

用來讓規則在其內建立其他動作的機制 依附元件舉例來說,如果目標 A 依附於 B,則其中一個可以對 會將依附元件邊緣「向上」週遊 B,並在 B 中執行其他動作 產生及收集額外的輸出檔案這些額外動作為 之間的快取和重複使用。使用 aspect() Starlark Build API 函式。舉例來說 以及建立程式碼檢查動作。

另請參閱: 切面說明文件

長寬比

可將不同切面套用至結果的組合機制 其他方面舉例來說,如果產生 IDE 可以套用於從頭產生.java檔案的切面 proto。

以要套用的切面A來說,B就是要套用的供應商B」在 provides 屬性中放送廣告 必須與 Arequired_aspect_providers 中宣告所需項目相符 屬性。

屬性

規則的參數,用來表示每個目標的建構資訊。 例如 srcsdepscopts 分別宣告 目標的來源檔案、依附元件和自訂編譯器選項。我們 可用屬性取決於其規則類型。

.bazelrc

Bazel 的設定檔,用來變更啟動程序的預設值 旗標指令旗標以及 然後可在 Bazel 指令列上 --config 旗標。Bazel 可以合併多個 bazelrc 檔案的設定 (整個系統、每個工作區、每位使用者或自訂位置),以及 「bazelrc」檔案可能也會從其他 bazelrc 檔案匯入設定。

Blaze

Google 內部的 Bazel 版本。Google 的主要建構系統 單點存放區

BUILD 檔案

BUILD 檔案是主要設定檔,用於告知 Bazel 哪一項軟體 要建構的輸出內容、依附元件及其建構方式Bazel 將 BUILD 檔案做為輸入內容,並使用該檔案建立依附元件圖表 以及產生必須完成的動作 軟體輸出BUILD 檔案會標示目錄,以及不屬於任何子目錄 內含 BUILD 檔案做為套件,且可包含 根據規則建立的目標。您也可以將檔案命名為 BUILD.bazel

BUILD.bazel 檔案

請參閱 BUILD 檔案一節。優先順序高於同一個同一中的 BUILD 檔案 目錄。

.bzl 檔案

這個檔案定義了使用以下格式寫入規則、巨集和常數 Starlark。這些資料可以匯入至 BUILD 檔案透過 load() 函式使用。

建構圖表

Bazel 會建構及遍歷執行建構作業的依附關係圖。 包含目標已設定的節點 目標動作成果。A 罩杯 如果同時具備一組構件 要求的目標依附元件經驗證為最新資訊。

版本設定

Starlark 定義的一系列設定轉換:可以調整建構設定來變更子圖表的 此外還會從 0 自動調整資源配置 您完全不必調整資源調度設定如以指令列標記的形式向使用者公開, 也稱為建構旗標

清除版本

不使用先前建構結果的版本。速度通常較慢 通常會視為「漸進式建構作業」正確。Bazel 可保證簡潔和漸進式建構 一律正確。

用戶端與伺服器模型

bazel 指令列用戶端會自動在 執行 Bazel 指令。伺服器會在 也會在閒置一段時間後自動停止 (或透過 )。將 Bazel 分割成伺服器和用戶端,有助於調整 JVM 並支援更快速的漸進式建構作業 因為所有指令的記憶體動作圖表都會保留在記憶體中。

指令

在指令列中使用用來叫用不同的 Bazel 函式,例如 bazel buildbazel testbazel runbazel query

指令旗標

一組指令專屬的標記。已指定指令旗標 在指令 (bazel build <command flags>)。標籤適用於 一或多個指令舉例來說,--configure 是專用於 bazel sync 指令,但 --keep_going 適用於 syncbuildtest 等。標記通常用於設定 因此,標記值如有變更,可能會導致 Bazel 將記憶體內記憶體失效 ,並重新啟動分析階段

設定

規則定義以外的資訊會影響規則產生方式 動作。每個建構作業至少都有一項設定 目標平台、動作環境變數及指令列建構 旗標轉換可能會產生 設定像是主機工具或跨平台程式碼編譯

另請參閱: 設定

設定裁剪

僅包含設定項目的程序, 實際需求例如,如果您使用 C++ 建構 Java 二進位檔 //:j 依附元件 //:c 時,在--javacopt 設定 //:c,因為變更 --javacopt 會意外中斷 C++ 建構快取功能

已設定的查詢 (cquery)

查詢工具,可查詢已設定的 目標 (在分析階段之後 完成)。這意味著 select()建構標記 (例如 --platforms) 均正確無誤,且準確反映結果。

另請參閱: Cquery 說明文件

已設定的目標

使用 設定分析階段會產生 我們只要結合建構的選項和需要建構的目標即可。 舉例來說,假設 //:foo 在同一處為兩個不同架構建構 當中包含兩個設定的目標:<//:foo, x86><//:foo, arm>

正確性

如果建構作業的輸出內容確實反映其狀態,表示建構作業正確無誤 遞移輸入為了達成正確的建構作業,Bazel 致力於 智慧、可重現、開發建構 分析動作執行 確定性

依附元件

兩個目標之間的導向邊緣。目標「//:foo」有一個目標 如果 //:foo 的屬性值包含目標 //:bar,則依附元件//:bar 的參照。如果發生以下情況,//:foo 具有 //:bar動作依附元件 //:foo 的動作取決於輸入的成果 動作//:bar

在特定情況下,也可能參照外部依附元件。看 模組

偏移

收集遞移依附元件資料的資料結構。已完成最佳化 這種合併模型通常具有時間和空間效率 非常大型的 depset (數百個檔案)。實作目標 出於空間效率而遞迴參照其他函式庫。規則 導入方式不應「扁平化」而是將其轉換為清單 規則位於建構圖表的頂層壓平合併大型解碼器會產生 會耗用大量記憶體在 Bazel 內部也稱為「巢狀集合」

另請參閱: Depset 說明文件

磁碟快取

用於遠端快取功能的本機 blob 儲存庫。適用範圍 並與實際的遠端 blob 儲存庫搭配使用。

泥土

唯讀目錄,其中包含 Bazel 會從 也會透過存放區規則 來部署網際網路讓建構作業完全離線執行。

動態執行

依據下列指標選擇本機與遠端執行的執行策略: 多個經驗法則,並採用 方法。某些動作會在本機更快執行 (例如, 連結),而其他方法則加快遠端 (例如可高度平行處理) 編譯)。動態執行策略 執行建構作業

執行階段

建構的第三個階段。執行動作中的動作分析階段中建立的圖表。 這些動作會叫用執行檔 (編譯器、指令碼) 以便讀取及寫入 Artifacts。「依據策略」決定了這些動作的 例如本機、遠端、動態、沙箱機制、docker 等等

執行根目錄

工作區輸出基準中的目錄 執行本機動作的目錄 非沙箱機制版本。目錄內容主要是符號連結 來自工作區的輸入 Artifacts。執行根目錄 包含連至外部存放區的符號連結,做為其他輸入內容,且 bazel-out 用於儲存輸出內容在載入階段準備 建立代表遞移性目錄的符號連結樹系 關閉建構依附的套件。可透過指令列中的 bazel info execution_root 存取。

檔案

請參閱「成果」。

遺傳

如果建構和測試對建構和測試沒有外部影響,就代表建構本質 作業,確保結果具有確定性 正確。舉例來說,密封的建物通常禁止網路使用 能存取動作、限制存取宣告的輸入內容、使用固定的時間戳記,以及 設定時區、限制對環境變數的存取權,以及使用固定種子來 隨機號碼產生器

漸進式建構

漸進式建構作業會重複使用較早版本的結果,以縮短建構時間 以及資源用量依附元件檢查和快取目標是 產生這類建構作業的結果漸進式建構作業與 建構應用程式

標籤

目標的 ID。通常會有 @repo//path/to/package:target,其中 repo 是 (apparent) 名稱的 包含目標的 repository,則 path/to/package 是路徑 加入到含有 BUILD 檔案的目錄,宣告 target (這個目錄也稱為套件) 和 target 是目標本身的名稱。視情況而定 語法可以省略

另請參閱標籤

正在載入階段

建構的第一階段,Bazel 會在這個階段執行 BUILD 檔案, 可以建立套件巨集和特定函式,例如 系統會在這個階段評估 glob()。與 建構,分析階段,建立目標 圖表

巨集

在以下位置組合多個規則目標宣告的機制 單一 Starlark 函式。啟用重複使用常用規則宣告 各個 BUILD 個檔案的模式。擴展至基礎規則目標 在載入階段期間宣告所有宣告狀態。

另請參閱: 巨集說明文件

記憶音

由規則作者選取的簡短字串,使用者容易理解 規則中的「動作」是什麼?魔法可以做為 選項 ID。以下列舉幾個動作記憶範例 是 Java 規則的 Javac、C++ 規則的 CppCompile,以及 繫結至 Android 規則的 AndroidManifestMerger

模組

可擁有多個版本的 Bazel 專案,而且每個版本可 依附於其他模組這類似於我們在其他專案所熟悉的概念 依附元件管理系統,例如 Maven 構件、npm 套件 前往 module 或 Cargo crate。模組構成 Bazel 外部的骨幹 依附元件管理系統

每個模組都會由存放區支援,而每個模組都有一個 MODULE.bazel 檔案 根目錄。此檔案包含模組本身的中繼資料 (例如名稱 版本)、直接依附元件和其他各種資料,包括工具鍊 註冊和模組擴充功能輸入。

模組中繼資料由 Bazel 註冊資料庫代管。

另請參閱: Bazel 模組

模組擴充功能

一組邏輯,可藉由讀取文字的方式,執行以產生存放區 來自「module」依附元件圖表及叫用存放區的輸入內容 規則。模組擴充功能的功能與存放區類似 允許學生存取網際網路、執行檔案 I/O 等。

另請參閱: 模組擴充功能

原生規則

Bazel 內建的規則,並透過 Java 實作。這類規則 在 .bzl 檔案中,會顯示為原生模組中的函式 (針對 例如 native.cc_librarynative.java_library)。使用者定義規則 (非原生) 使用 Starlark 建立。

輸出基數

用來儲存 Bazel 輸出檔案的工作區專屬目錄。二手車 區分出輸出與工作區來源樹狀結構 (主要 repo)。這個位置位於輸出使用者根目錄中。

輸出群組

當 Bazel 完成建構 目標。規則會將一般的輸出內容放在「預設輸出群組」中 (例如 .jar 檔案的 java_library 檔案,.a.socc_library 目標)。預設輸出群組是輸出群組 系統會在指令列要求目標時建構 artifacts。 規則可以定義更多已命名的輸出群組,而這些群組可在以下位置明確指定: BUILD 檔案 (filegroup 規則) 或指令列 (--output_groups 標記)。

輸出使用者根目錄

用於儲存 Bazel 輸出內容的使用者特定目錄。目錄名稱為 衍生自使用者的系統使用者名稱。如果發生以下情況,會防止輸出檔案衝突 多位使用者同時在系統中建立一項專案。 包含與個別工作區建構輸出內容相對應的子目錄, 也稱為輸出基礎

套件

BUILD 檔案定義的目標組合。A 罩杯 套件名稱是 BUILD 檔案相對於存放區的路徑 根目錄。套件可包含子套件或含有 BUILD 的子目錄 進而形成套件階層。

套件群組

代表一組套件的目標。通常用於 visibility 屬性值。

平台

「機器類型」輸出內容這包括執行 Bazel 的機器 (「主機」平台)、機器建構工具會在 (「exec」平台) 上執行。 而機器目標則是針對 (「目標平台」) 而打造。

供應商

結構定義,用來說明在 規則目標,包括依附元件關係。通常這下 包含編譯器選項、遞移來源或輸出檔案等資訊 以及建構中繼資料經常與 depsets 搭配使用, 有效率地儲存累積的遞移資料內建提供者示例 為 DefaultInfo

另請參閱: 供應商說明文件

查詢 (概念)

分析建構圖表的程序,以瞭解 target 屬性和依附元件結構。Bazel 支援三種 查詢變化版本:querycquery查詢

查詢 (指令)

適用於建構後載入後運作的查詢工具 階段 目標圖表。這個速度相對快 但無法分析 select()建構標記Artifacts 或建構動作

另請參閱: 查詢操作說明查詢參考資料

存放區

目錄樹狀結構,其根目錄有界線標記檔案,內含來源 可在 Bazel 建構作業中使用的檔案通常會縮短為只有 repo

存放區邊界標記檔案可以是 MODULE.bazel (表示這個存放區位於) 代表 Bazel 模組、REPO.bazel,或是在舊版環境中使用 WORKSPACEWORKSPACE.bazel。任何存放區邊界標記檔案,都代表 repo;目錄中可以同時存在多個這類檔案。

主要存放區是執行目前 Bazel 指令的存放區。

外部存放區是透過在 MODULE.bazel 中指定模組來定義 檔案,或在模組中叫用存放區規則 擴充功能。可供系統視需求擷取到 「magical」也就是磁碟的位置

每個存放區都有專屬的常數標準名稱,但可能有所不同 apparent 名稱。

另請參閱外部依附元件總覽

存放區快取

由 Bazel 為建構下載的檔案共用可定址快取資料, 可跨工作區共用。在 初始下載的檔案通常會用來快取透過存放區下載的檔案 和存放區規則 API (例如 http_archive) 和存放區規則 API repository_ctx.download。系統只會在檔案的 SHA-256 總和檢查碼 指定的版本

存放區規則

存放區定義的結構定義,用於指示 Bazel 如何具體化 (或 「擷取」) 存放區。通常會縮短為只有存放區規則。 Bazel 會在內部叫用存放區規則,藉此定義 模組,或由模組擴充功能叫用。 存放區規則可以存取網際網路或執行檔案 I/O;是最常見的存放區 規則 http_archive,即可下載內含來源檔案的封存檔 網際網路

另請參閱: 存放區規則說明文件

可複製性

建構或測試的輸入項目 (用於建構或測試) 的屬性 不論時間、方法或方法為何,每次都會產生相同的一組輸出內容 或是某個環境請注意,這不代表這些輸出內容 正確或所需的輸出內容。

規則

BUILD 檔案中定義規則目標的結構定義,例如 cc_library。從 BUILD 檔案作者的角度來看,規則包含 一組屬性和黑盒邏輯。邏輯會指示 會指定如何產生輸出 Artifacts,並將資訊傳送至 和其他規則目標一樣從 .bzl 位作者的角度來看,規則是 擴充 Bazel 以支援新程式設計語言 環境

規則會例項化,以產生規則目標 載入階段。在分析階段規則中 目標將資訊傳遞給其下游依附元件,格式為 供應商以及註冊動作,並註冊說明 輸出構件這些動作是在執行 階段

另請參閱: 規則說明文件

規則目標

代表規則例項的目標。與檔案目標的對比 和套件群組不要與規則混淆。

執行檔案

可執行目標的執行階段依附元件。最常見的是 執行檔是測試規則的可執行輸出內容,而執行檔案則是執行階段 測試的資料依附元件叫用執行檔前 (期間 Bazel 測試) 中,Bazel 準備要和測試執行檔一起準備執行檔案的樹狀結構 按照來源目錄結構區隔資源

另請參閱: Runfiles 說明文件

沙箱機制

一種技巧:可在受限的 暫時性的「執行根層級」,確保模型不會 讀取未宣告的輸入內容,或寫入未宣告的輸出內容。沙箱機制大幅改善 hermeticity 是指通常產生效能成本,且需要 為作業系統提供支援服務效能費用會因平台而異。 在 Linux 上這並不重要,但在 macOS 上可能會使沙箱無法使用。

SkyFrame

SkyFrame 是 Bazel 的核心平行、功能及漸進式評估架構。

沖壓

將額外資訊嵌入 Bazel 建構的功能 Artifacts。例如,這可用於控管原始碼、建構應用程式 以及發布子版本的其他工作區或環境相關資訊。 透過可停用的 --workspace_status_command 旗標和規則啟用 支援戳記屬性

史塔拉克

用於編寫規則巨集的擴充功能語言。A 罩杯 部分 Python 應用程式 (語法和文法上),旨在達成 並設定想要提高效能使用 .bzl 檔案。BUILD 個檔案使用更多 受限的 Starlark 版本 (例如沒有 def 函式定義),舊稱 叫做 Skylark

另請參閱: Starlark 語言說明文件

啟動標記

bazelcommand 之間的一組旗標, 例如 bazel --host_jvm_debug 版本這些旗標會修改 設定,因此任何修改 啟動旗標會導致伺服器重新啟動。啟動標記並非專屬於任何 指令

目標

BUILD 檔案中定義的物件,以 label。目標代表中可建構的工作區單元 使用者的觀點。

建立例項化 規則所宣告的目標稱為規則 目標。視規則而定,這些程式碼可以執行 (例如 cc_binary) 或可測試 (例如 cc_test)。規則目標通常取決於 透過其屬性 (例如 deps) 追蹤其他目標。這些 依附元件構成目標圖表的基礎。

除了規則目標之外,還有檔案目標和套件群組 目標。檔案目標與參照的成果相對應 於 BUILD 檔案中。做為特殊案例,任何套件的 BUILD 檔案 一律視為該套件中的來源檔案目標

載入階段期間,系統會探索目標。活動期間 分析階段,目標則與建構 形成已設定的 目標。

目標圖表

目標及其依附元件的記憶體內圖表。製作期間 載入階段,並做為分析作業的輸入內容 階段

目標模式

在指令列中指定一組目標的方法。經常 使用的模式包括 :all (所有規則目標)、:* (所有規則 + 檔案目標)、 ... (目前的套件和所有子套件會以遞迴方式處理)。可使用 舉例來說,//...:* 代表 從 workspace 的根目錄以遞迴方式封裝套件。

測試命名空間

從測試規則執行個體化的目標,因此包含 測試執行檔執行檔完成後傳回零的傳回代碼 表示測試成功。Bazel 和測試作業之間的確切合約 (例如 環境變數、測試結果收集方法) 透過測試 百科全書

工具鏈

一組可建構語言輸出內容的工具。工具鍊通常包括 編譯器、連結器、翻譯器和/和 Linter工具鍊也可能 平台,也就是說,Unix 編譯器工具鍊的元件可能與 Windows 變化版本 (即使工具鍊為同一語言)。選取中 適用於平台的正確工具鍊稱為「工具鍊解析度」。

頂層目標

如果透過 Bazel 指令要求建構目標,則建構「目標」就是頂層 互動舉例來說,如果 //:foo 依附 //:bar,而 bazel build //:foo 是 呼叫,然後針對這項建構作業,//:foo 是頂層,//:bar 則沒有 但需要同時建構兩個目標另一個重要差異 兩者之間的指令是 標記,或使用 .bazelrc) 的部分,即可為頂層機構進行設定 但可以藉由針對非頂層的轉換修改 目標。

轉移

設定狀態從某個值對應至另一個值。 在建構圖表中啟用目標,加入不同的 即使這些配置是透過相同規則執行個體化,也能使用。A 罩杯 「分割」轉換的常見用途是進行, 目標圖表是以不同的設定分支, 兩支叉子。舉例來說,您可以用原生二進位檔建構 Android APK 並在單一建構作業中使用分割轉換功能進行 ARM 和 x86 編譯。

另請參閱: 使用者定義的轉場效果

樹木構件

代表一組檔案的構件。因為這些 檔案並非成果,而是對其執行操作的動作 而是將樹狀結構構件註冊為輸入或輸出內容

顯示設定

以下兩種防止建構系統產生不必要依附元件的機制之一: 目標瀏覽權限,控管是否可依賴目標 不會有任何影響和載入瀏覽權限,用於控制 BUILD.bzl 檔案可能會載入指定 .bzl 檔案。如果沒有背景脈絡,通常 「顯示設定」指的是目標瀏覽權限

另請參閱: 瀏覽權限說明文件

工作區

所有 Bazel 指令共用的環境都會從同一個 main 指令 存放區

請注意,以往「存放區」的概念和「工作區」已經 混淆;「workspace」一詞經常用來指稱 有時甚至會用作「存放區」的同義詞這類用法 。