建置檔案

回報問題

BUILD 檔案中的可用方法。另請參閱「建構百科全書」,瞭解其他函式和建構規則,這些規則也可用於 BUILD 檔案。

成員

解壓縮

depset depset(direct=None, order="default", *, transitive=None)

建立「depset」direct 參數是解碼器的直接元素清單,transitive 參數是解碼器清單,其元素會成為已建立解碼器的間接元素。元素在 Depset 轉換為清單時傳回的順序,是由 order 參數指定。詳情請參閱「Depsets 總覽」。

依附元件的所有元素 (直接和間接) 都必須與運算式 type(x) 取得的類型相同。

由於雜湊集是用來在疊代期間刪除重複項目,因此資料集的所有元素都應該要能進行雜湊處理。不過,目前並非所有建構函式中都會檢查這個不變性。使用 --incompatible_always_check_depset_elements 標記來啟用一致的檢查功能,這是日後版本中的預設行為;請參閱問題 10313

此外,元素目前必須無法變更,但日後將會放寬。

已建立的解碼器順序應與其 transitive 解碼順序相容。「"default"」訂單適用於其他訂單,所有其他訂單都僅與自己相容。

參數

參數 說明
direct sequenceNone;預設值為 None
依附元件的直接元素清單。
order 預設值為 "default"
新變數的周遊策略。如要查看可能的值,請參閱這篇文章
transitive depsetsequence;或 None;預設值為 None
此為依附元件清單,其中元素會成為解碼器的間接元素。

existing_rule

unknown existing_rule(name)

傳回類似字典的不可變更物件,該物件會描述在這個執行緒套件中例項化的規則屬性;如果沒有任何該名稱的規則例項,則傳回 None

此處的「不可變的 dict 物件」是指深度不可變更的物件 x,支援類似 dict 的疊代、len(x)name in xx[name]x.get(name)x.items()x.keys()x.values()

如果設定了 --noincompatible_existing_rules_immutable_view 旗標,則會改為傳回含有相同內容的新可變動字典。

結果會包含每個屬性的項目,但私人屬性 (名稱開頭不是字母) 和一些無法代表的舊版屬性類型除外。此外,字典包含規則例項 namekind 的項目 (例如 'cc_binary')。

結果的值代表屬性值如下:

  • 類型 str、Int 和 bool 的屬性表示方式為 。
  • 對於同一套件中的目標,標籤會轉換為 ':foo' 格式的字串,對於不同套件中的目標,標籤會轉換為 '//pkg:name'
  • 清單會以元組表示,而字典會轉換成新的可變動字典。這些元素會以相同的方式遞迴轉換。
  • 如上所述,系統會一併轉換 select 值的內容轉換內容。
  • 建立規則例項時未指定任何值,且計算其預設值的屬性,不會納入結果。(分析階段才能計算計算的預設值)。

請盡量避免使用此函式。這會導致 BUILD 檔案簡單且依照順序排列。另請注意,規則屬性值從內部形式到 Starlark 的另外兩種轉換也與計算結果大不相同:系統會依計算預設值使用,另一個由 ctx.attr.foo 使用。

參數

參數 說明
name 必填
目標的名稱。

existing_rules

unknown existing_rules()

傳回類似字典的不可變更物件,描述此執行緒套件中目前執行個體化的規則。類似字典物件的每個項目,都會將規則執行個體的名稱對應至 existing_rule(name) 傳回的結果。

此處的「不可變的 dict 物件」是指深度不可變更的物件 x,支援類似 dict 的疊代、len(x)name in xx[name]x.get(name)x.items()x.keys()x.values()

如果設定了 --noincompatible_existing_rules_immutable_view 旗標,則會改為傳回含有相同內容的新可變動字典。

注意:請盡量避免使用這個函式。這會導致 BUILD 檔案簡單且依照順序排列。此外,如果設定了 --noincompatible_existing_rules_immutable_view 旗標,這個函式可能會非常高昂,尤其是在迴圈內呼叫時。

exports_files

None exports_files(srcs, visibility=None, licenses=None)

指定從這個套件匯出至其他套件的檔案清單。

參數

參數 說明
srcs 字串sequence;必要
要匯出的檔案清單。
visibility sequenceNone;預設值為 None
可指定瀏覽權限宣告。檔案可向指定目標顯示。如果沒有指定瀏覽權限,每個套件都能查看檔案。
licenses 字串sequenceNone;預設為 None
必須指定授權。

glob

sequence glob(include=[], exclude=[], exclude_directories=1, allow_empty=unbound)

Glob 會傳回目前套件中的每個檔案,且其可變動且經過排序:
  • 至少符合 include 中的一個模式。
  • 不符合 exclude 中的任何模式 (預設 [])。
如果啟用 exclude_directories 引數 (設為 1),結果中系統會省略類型目錄的檔案 (預設為 1)。

參數

參數 說明
include 字串序列;預設值為 []
要納入的 glob 模式清單。
exclude 字串序列;預設值為 []
要排除的 glob 模式清單。
exclude_directories 預設值為 1
用於排除目錄的標記。
allow_empty 預設值為 unbound
是否允許 glob 模式比對任何項目。如果「allow_empty」為 False,每個納入模式都必須相符,而最終結果也必須是空白的 (在排除「排除」模式的相符項目後)。

module_name

string module_name()

與這個套件的存放區相關聯的 Bazel 模組名稱。如果這個套件來自 WORKSPACE 中定義的存放區,而非 MODULE.bazel,則這個套件沒有任何內容。如為由模組擴充功能產生的存放區,這就是代管擴充功能的模組名稱。與 module_ctx.modules 中顯示的 module.name 欄位相同。可能會傳回 None

module_version

string module_version()

與這個套件的存放區相關聯的 Bazel 模組版本。如果這個套件來自 WORKSPACE 中定義的存放區,而非 MODULE.bazel,則這個套件沒有任何內容。針對由模組擴充功能產生的存放區,這是代管擴充功能的模組版本。與 module_ctx.modules 中顯示的 module.version 欄位相同。可能會傳回 None

package_group

None package_group(name, packages=[], includes=[])

這個函式會定義一組套件,並將標籤指派給群組。您可以在 visibility 屬性中參照這個標籤。

參數

參數 說明
name 必填
這項規則的專屬名稱。
packages 字串序列;預設值為 []
這個群組中的套件完整列舉。
includes 字串序列;預設值為 []
此套件中包含的其他套件群組。

package_name

string package_name()

接受評估的套件名稱。例如,在 BUILD 檔案中,其值為 some/packagesome/package/BUILD如果 BUILD 檔案呼叫在 .bzl 檔案中定義的函式,package_name() 會與呼叫端 BUILD 檔案套件比對。此函式等同於已淘汰的變數 PACKAGE_NAME

package_relative_label

Label package_relative_label(input)

在目前正在初始化的套件環境中 (也就是執行目前巨集的 BUILD 檔案),將輸入字串轉換為「Label」物件。如果輸入內容已經是 Label,則傳回不變。

只有在評估 BUILD 檔案及其直接或間接呼叫的巨集時,才能呼叫此函式;不能在 (例如) 規則實作函式中呼叫這個函式。

這個函式的結果與 Label 值相同,將指定字串傳遞至 BUILD 檔案中所宣告目標的標籤值屬性時產生的值。

使用注意事項:這個函式和 Label() 的差異在於 Label() 會使用呼叫該檔案的 .bzl 檔案套件,而非 BUILD 檔案的套件。如要參照以硬式編碼方式寫入巨集的固定目標 (例如編譯器),請使用 Label()。需要將 BUILD 檔案提供的標籤字串正規化為 Label 物件時,請使用 package_relative_label()。(如果套件不是 BUILD 檔案或呼叫 .bzl 檔案,就無法將字串轉換為 Label)。因此,外部巨集應一律優先將標籤物件傳送至內部巨集,而不是標籤字串)。

參數

參數 說明
input string;或 Label;必填
輸入標籤字串或標籤物件。如果傳送的是標籤物件,則會傳回原樣。

repository_name

string repository_name()

呼叫規則或建構擴充功能的存放區名稱。例如,如果 WORKSPACE 空白區 local_repository(name='local', path=...) 呼叫存在的套件,這個套件會設為 @local。在主要存放區中的套件中,系統會將它設為 @。此函式等同於已淘汰的變數 REPOSITORY_NAME

選取

unknown select(x, no_match_error='')

select() 是輔助函式,使規則屬性「可設定」。詳情請參閱「建構百科全書」。

參數

參數 說明
x 必要
將設定條件對應至值的字典。每個鍵都是 Label 或標籤字串,用於識別 config_setting 或 constraint_value 例項。如要瞭解如何使用標籤而非字串,請參閱巨集說明文件
no_match_error 預設值為 ''
如果沒有相符條件,要回報的自訂錯誤。

子套件

sequence subpackages(include, exclude=[], allow_empty=False)

傳回目前套件中所有直接子套件的新可變動清單,無論檔案系統目錄深度為何。傳回的清單會經過排序,其中包含與目前套件相關的子套件名稱。建議優先使用 bazel_skylib.subpackages 模組中的方法,而不要直接呼叫此函式。

參數

參數 說明
include stringsequence;必要
要納入子套件掃描的 glob 模式清單。
exclude 「string」序列;預設值為 []
從子套件掃描中排除的 glob 模式清單。
allow_empty 預設值為 False
表示呼叫是否傳回空白清單。根據預設,空白清單代表 BUILD 檔案可能發生了超大量的 subpackages() 呼叫。如果設為 true,這個函式就會執行成功。