Bazel 使用的原始碼是在樹狀目錄下建構的軟體,稱為
工作區工作區中的來源檔案會以巢狀方式整理
套件階層,其中每個套件都是包含一組集合的目錄
以及一個 BUILD
檔案。BUILD
檔案會指定
軟體輸出內容可以從來源建構
工作區
工作區是檔案系統中的目錄樹狀結構,內含原始碼
適合要建構的軟體檔案每個工作區都有一個名為
WORKSPACE
可能沒有任何內容,或包含
建構輸出內容所需的外部依附元件。
包含 WORKSPACE
檔案的目錄,會視為
工作區因此,Bazel 會忽略位於 Root 權限的工作區中的所有目錄樹狀結構
位於包含 WORKSPACE
檔案的子目錄,如同這些檔案形成另一個工作區。
Bazel 也支援 WORKSPACE.bazel
檔案做為 WORKSPACE
檔案的別名。
如果兩個檔案都存在,系統會使用 WORKSPACE.bazel
。
存放區
程式碼彙整在存放區中。包含 WORKSPACE
的目錄
檔案是主要存放區的根目錄,也稱為 @
。其他 (外部)
存放區是透過工作區規則在 WORKSPACE
檔案中定義。
如要瞭解 Bazel 隨附的工作區規則,請參閱 建構百科全書以及 內嵌 Starlark 存放區規則。
由於外部存放區本身就是存放區,因此通常會包含
WORKSPACE
檔案。不過,這些額外 WORKSPACE
檔案
但是 Bazel 才會忽略。尤其是會連帶依賴的存放區
未自動加入。
套件
存放區中程式碼組織的主要單位是套件。A 罩杯 「Package」是一組相關檔案,並指定 並產生輸出內容
套件定義為包含名為 BUILD
檔案的目錄
(或 BUILD.bazel
)。套件包含其目錄中的所有檔案,加上
除了其下層的子目錄
BUILD
檔案。根據定義,任何檔案或目錄
兩個不同的套件
例如,在以下目錄樹狀結構中
有兩個套件:my/app
和子套件 my/app/tests
。
請注意,my/app/data
不是套件,而是目錄
隸屬於「my/app
」套件。
src/my/app/BUILD
src/my/app/app.cc
src/my/app/data/input.txt
src/my/app/tests/BUILD
src/my/app/tests/test.cc
目標
套件是 目標的容器,定義在套件的
BUILD
檔案。大部分目標都是以下兩種主體之一:檔案和規則。
檔案再分為兩類。來源檔案通常是 並簽入存放區 產生的檔案,有時也稱為衍生檔案或輸出檔案。 系統不會簽到,而是根據來源檔案產生。
第二種目標是透過規則宣告。每項規則 instance 指定一組輸入項目和一組輸入集合之間的關係 輸出檔案規則的輸入內容可能是來源檔案 可能是其他規則的輸出內容
規則的輸入內容是來源檔案或系統產生的檔案 通常不會產生實質影響重點只在於 檔案。如此一來,就能輕鬆將複雜的來源檔案取代為 舉例來說,在負擔 2014 年 通常無法手動維護高度結構化檔案 卻有人撰寫程式化繁為簡。沒有變化 所需的檔案使用者相反地 檔案應該很容易替換為只有本機檔案的來源檔案 並輸入變更內容
規則的輸入可能也會包含其他規則。 這種關係通常相當複雜 端視語言或規則,但直覺上都很簡單:C++ 程式庫規則 A 可能有另一個用於輸入的 C++ 程式庫規則 B。 這項依附元件的影響在於 B 的標頭檔案 A 會在編譯期間使用,因此 A 的符號可以 而 A 會在連結期間提供 B 的執行階段資料
所有規則的變化版本都是由規則產生的檔案 一律與規則本身屬於同一套件;不是 產生其他套件的檔案這不常見 規則輸入內容就會來自另一個套件
套件群組是一組套件的組合,用於限制無障礙功能
某些規則套件群組是由 package_group
函式定義。
這類檔案有三個屬性:當中包含的套件清單、名稱,以及
其他套件群組。您只能透過以下方式提及這些資源
根據規則的 visibility
屬性或 default_visibility
package
函式的屬性;就不會產生或使用檔案
詳情請參閱
package_group
說明文件。