建置檔案

回報問題

BUILD 檔案中可用方法。另請參閱「建構百科全書」瞭解可用於 BUILD 檔案中的額外函式和建構規則。

成員

露點

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

建立 depsetdirect 參數是 Depset 的直接元素清單,而 transitive 參數是一系列依附元件,其元素會成為所建立 Depset 的間接元素。將 Depset 轉換為清單時,元素傳回的順序是由 order 參數指定。詳情請參閱「Depsets 總覽」。

depset 的所有元素 (直接和間接) 都必須屬於相同類型,如 type(x) 運算式所取得。

由於雜湊式集是用於在疊代期間刪除重複項目,因此解碼集的所有元素都必須可供雜湊處理。不過,目前並非所有建構函式中都會以一致的方式檢查這個不變數。請使用 --incompatible_always_check_depset_elements 標記啟用一致的檢查功能,這在日後版本中將是預設行為;請參閱問題 10313

此外,元素目前必須為不可變動,但這項限制日後將會放寬。

所建立 Depset 的順序應與 transitive 解碼器的順序相容"default" 訂單與其他訂單相容,所有其他訂單都只能與自己相容。

參數

參數 說明
direct 序列; 或 None;預設值為 None
直接直接直接元素元素。
order 預設值為 "default"
新模式的周遊策略。如要查看可能的值,請參閱這裡
transitive depsetsequence;或是 None;預設為 None
這個依附元件清單將含有元素將成為 Depset 的間接元素。

existing_rule

unknown existing_rule(name)

傳回類似字典的不可變物件,該物件會說明在此執行緒套件中執行個體化的規則屬性;如果名稱沒有規則執行個體,則傳回 None

此處的「類似字典物件」意指一個非常不可變的物件 x,支援類似字典的疊代、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()

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

此處的「類似字典物件」意指一個非常不可變的物件 x,支援類似字典的疊代、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 sequence;或 None;預設值為 None
可指定瀏覽權限宣告。指定的目標將可看到這些檔案。如未指定瀏覽權限,每個套件都能看到檔案。
licenses 字串sequence;或 None;預設值為 None
要指定授權。

Glob

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

Glob 會傳回目前套件中的每個檔案、可變動的排序清單,且該清單符合以下條件:
  • 比對 include 中的至少一個模式。
  • 不符合 exclude 中的任何模式 (預設為 [])。
如果已啟用 exclude_directories 引數 (設為 1),結果會省略類型目錄的檔案 (預設值為 1)。

參數

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

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 「字串」的 sequence;預設為 []
這個群組中套件的完整列舉。
includes 「字串」的 sequence;預設值為 []
此包含的其他套件群組。

package_name

string package_name()

接受評估的套件名稱。例如,在 BUILD 檔案 some/package/BUILD 中,其值將是 some/package。如果 BUILD 檔案呼叫了 .bzl 檔案中定義的函式,package_name() 會與呼叫端的 BUILD 檔案套件相符。這個函式等同於已淘汰的變數 PACKAGE_NAME

package_relative_label

Label package_relative_label(input)

根據目前初始化的套件 (也就是執行目前巨集的 BUILD 檔案),將輸入字串轉換為 Label 物件。如果輸入內容已是 Label,則會傳回不變。

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

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

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

參數

參數 說明
input string;或 Label;必要
輸入標籤字串或標籤物件。如果傳遞 Label 物件,系統會依原樣傳回該物件。

repository_name

string repository_name()

用於呼叫規則或建構擴充功能的存放區名稱。舉例來說,WORKSPACE 群組 local_repository(name='local', path=...) 呼叫的套件中已存在,該套件會設為 @local。在主要存放區的套件中,會設為 @。這個函式等同於已淘汰的變數 REPOSITORY_NAME

選取

unknown select(x, no_match_error='')

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

參數

參數 說明
x 必要
將設定條件對應至值的字典。每個鍵都是用於識別 config_setting 或 constraint_value 執行個體的標籤或標籤字串。如要瞭解使用標籤 (而非字串) 的時機,請參閱巨集說明文件
no_match_error 預設值為 ''
如果沒有相符的條件,系統就會回報這個自訂錯誤。

子套件

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

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

參數

參數 說明
include 字串sequence;必要
要納入子套件掃描作業的 glob 模式清單。
exclude 字串sequence;預設為 []
要從子套件掃描作業中排除的 glob 模式清單。
allow_empty 預設值為 False
在呼叫傳回空白清單時是否會失敗。根據預設,空白清單代表 BUILD 檔案中的潛在錯誤,其中呼叫 subpackages() 非常嚴重。如果設為 true,這個函式將可成功執行。