工作區、套件和目標

回報問題 查看原始碼 Nightly · 7.4 . 7.3 7.2 7.1 7.0 6.5

Bazel 會使用以下形式的原始碼來建構軟體:該原始碼在樹狀目錄中 工作區工作區中的來源檔案會以巢狀階層結構整理, 套件,其中每個套件都屬於一個目錄,內含一組相關的 來源檔案和一個 BUILD 檔案。BUILD 檔案會指定執行的軟體 可以從來源建構

工作區

工作區是檔案系統中的目錄樹狀結構,內含原始碼 適合要建構的軟體檔案每個工作區都有一個名為 WORKSPACE 可能空白,或包含對 外部的參照 建構輸出內容所需的依附元件

包含 WORKSPACE 檔案的目錄,會視為 工作區因此,Bazel 會忽略根目錄為包含 WORKSPACE 檔案的子目錄的工作區中的任何目錄樹狀結構,因為這些目錄會形成另一個工作區。

Bazel 也支援 WORKSPACE.bazel 檔案做為 WORKSPACE 檔案的別名。如果 兩個檔案都存在,但使用 WORKSPACE.bazel

存放區

程式碼彙整在repositories中。包含 WORKSPACE 的目錄 檔案是主要存放區的根目錄,也稱為 @。其他 (外部) 存放區是使用工作區規則定義在 WORKSPACE 檔案中,或 透過 Bzlmod 系統中的模組和擴充功能產生內容查看外部 依附元件總覽

隨附 Bazel 的工作區規則會記錄在工作區 「Build」部分 百科全書和嵌入式相關說明文件 Starlark 存放區規則

由於外部存放區本身就是存放區,因此通常會包含 WORKSPACE 檔案。不過,Bazel 會忽略這些額外的 WORKSPACE 檔案。特別是,間接依附的存放區 自動新增。

套件

存放區中程式碼組織的主要單位是套件。A 罩杯 套件是相關檔案集合,以及檔案內容 以便產生輸出構件

套件定義為包含 BUILD 檔案,名稱為 BUILDBUILD.bazel。A 罩杯 套件包含其目錄中的所有檔案,以及其下的所有子目錄, 但不包含 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 檔案。大部分目標都是以下兩種主體之一:檔案規則

檔案可進一步分為兩種。來源檔案通常是由人手寫入,並提交至存放區。產生的檔案 (有時稱為衍生檔案或輸出檔案) 不會簽入,而是由來源檔案產生。

第二種目標是透過規則宣告。每個規則例項都會指定一組輸入內容與一組輸出檔案之間的關係。規則的輸入內容可能是來源檔案,但也可能是其他規則的輸出內容。

規則的輸入內容是來源檔案,還是由系統產生的檔案, 案件無形;重要的是該檔案的內容事實 讓您輕鬆將複雜的來源檔案換成 舉例來說,如果手動維持 都變得很累人,有人編寫程式來衍生出這個檔案 這個檔案的使用者無須進行任何變更。相反地 檔案應該很容易替換為只有本機變更的來源檔案。

規則的輸入可能也會包含其他規則。這類關係的確切意義通常相當複雜,且取決於語言或規則,但從直覺上來說,這很簡單:C++ 程式庫規則 A 可能會使用另一個 C++ 程式庫規則 B 做為輸入內容。這個依附元件的效果是,A 在編譯期間可使用 B 的標頭檔案、在連結期間可使用 B 的符號,以及在執行期間可使用 B 的執行階段資料。

但其他規則的不同之處在於,由規則產生的檔案一律會隸屬於 與規則本身相同的套件您無法產生 其他套件。規則輸入內容不常見 套件

套件群組是一組套件,目的是限制特定規則的存取權。套件群組是由 package_group 函式定義。它們有三個屬性:所含套件清單、名稱和所含其他套件群組。您只能透過規則的 visibility 屬性或 package 函式的 default_visibility 屬性參照這些屬性,這些屬性不會產生或使用檔案。如要 請參閱 package_group 說明文件

標籤