存放區、工作區、套件和目標

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

Bazel 使用的原始碼是以名為 與存放區工作區包含一組定義的存放區。資料來源 存放區中的檔案是以套件的巢狀結構整理, 每個套件都是包含一組相關來源檔案和 BUILD 檔案。BUILD 檔案會指定有哪些軟體輸出內容可以建構。 原始碼。

存放區

Bazel 建構作業使用的來源檔案會整理在「存放區」 (通常是 縮短為 repos)。存放區是一種目錄樹狀結構,界線標記檔案位於 是由這類邊界標記檔案可能是 MODULE.bazelREPO.bazel 或 在舊版情境下,WORKSPACEWORKSPACE.bazel

目前執行 Bazel 指令的存放區稱為 main 存放區。其他 (外部) 存放區是由存放區規則定義。查看外部 依附元件總覽

工作區

工作區是由所有 Bazel 指令從相同執行 主要存放區中。其中包含主要存放區,以及所有已定義外部 IP 位址的集合 來使用容器映像檔

請注意,以往「存放區」的概念和「工作區」已經 混淆;「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這項依附元件的影響在於 B 的標頭檔案 A 會在編譯期間使用,而 A 的符號在 A 期間 而 A 的執行階段資料則會在執行期間提供給 A。

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

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

標籤