工作區、套件和目標

回報問題 查看原始碼 夜間 7.2 7.1 7.0 6.5 6.4

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

工作區

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

包含 WORKSPACE 檔案的目錄,會視為 工作區因此,Bazel 會忽略值區根目錄下的任何目錄樹狀結構 包含 WORKSPACE 檔案的子目錄,可做為另一個工作區。

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

存放區

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

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

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

套件

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

套件定義為包含 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 檔案。大部分目標都是以下兩種主體之一:檔案規則

檔案再分為兩類。來源檔案通常是由 以及登錄到存放區產生的檔案、 有時候稱為衍生檔案或輸出檔案,系統不會簽入,但 產生的輸出內容。

第二種目標是透過規則宣告。每個規則例項 會指定輸入組和一組輸出檔案之間的關係。 規則的輸入內容可能是來源檔案,但也可能是 不過,編寫這類演算法並不容易 因為我們無法寫出所有可能的規則

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

規則的輸入可能也會包含其他規則。確切的意義 關係通常十分複雜且與語言或規則有關 使用起來相當簡單:C++ 程式庫規則 A 可能有另一個 C++ 程式庫 輸入規則 B這項依附元件的影響在於 B 的標頭檔案 A 會在編譯期間使用,而 A 的符號在 A 期間 而 A 的執行階段資料則會在執行期間提供給 A。

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

套件群組是一組套件的組合,目的是限制其可存取的 某些規則套件群組是由 package_group 函式定義。他們 有三個屬性:所含套件清單、名稱等等 封包群組您只能從 visibility規則屬性或 default_visibility 屬性 package 函式;就不會產生或使用檔案如要 請參閱 package_group 說明文件

標籤