可在 BUILD 檔案中使用的函式。如要瞭解其他函式和建構規則 (也可用於 BUILD 檔案),請參閱「建構百科全書」。
成員
- depset
- existing_rule
- existing_rules
- exports_files
- glob
- module_name
- module_version
- package_group
- package_name
- package_relative_label
- repo_name
- repository_name
- 選取
- subpackages
露點
depset depset(direct=None, order="default", *, transitive=None)建立 depset。
direct
參數是 Depset 的直接元素清單,而 transitive
參數是一系列依附元件,其元素會成為所建立 Depset 的間接元素。order
參數會指定將 depset 轉換為清單時,元素的傳回順序。詳情請參閱「Depsets 總覽」。
依據 type(x)
運算式取得的 depset 中,所有元素 (直接和間接) 都必須是相同類型。
由於雜湊式集是用於在疊代期間刪除重複項目,因此解碼集的所有元素都必須可供雜湊處理。不過,目前並未在所有建構函式中一致檢查此不變量。使用 --incompatible_always_check_depset_elements 標記啟用一致檢查功能,這將成為日後版本的預設行為;請參閱 Issue 10313。
此外,元素目前不得變動,但這項限制日後將會放寬。
建立的 depset 順序應與其 transitive
depset 順序相容。"default"
順序與任何其他順序相容,所有其他順序只與自身相容。
參數
參數 | 說明 |
---|---|
direct
|
sequence 或 None ;預設為 None 。 depset 的直接元素清單。 |
order
|
string;
預設為 "default" 。 新 depset 的遍歷策略。如要查看可能的值,請參閱這裡。 |
transitive
|
depset 的序列;或 None ;
預設值為 None 模式清單,其元素將成為解碼器的間接元素。 |
existing_rule
unknown existing_rule(name)傳回不可變動的字典類物件,用於描述在這個執行緒套件中例項化的規則屬性,如果沒有該名稱的規則例項,則傳回
None
。在此,不可變動的字典類型物件是指深層不可變動的物件 x
,可支援字典類型的疊代作業、len(x)
、name in x
、x[name]
、x.get(name)
、x.items()
、x.keys()
和 x.values()
。
產生的結果會包含每個屬性的項目,但私有屬性 (名稱開頭不是字母) 和一些無法呈現的舊版屬性類型除外。此外,字典中包含規則例項的 name
和 kind
(例如 'cc_binary'
) 項目。
結果值代表屬性值如下:
- 屬性類型為 str、int 和 bool 的屬性會以原樣表示。
- 針對同一套件中的目標,標籤會轉換為
':foo'
形式的字串,對於其他套件中的目標,則會轉換為'//pkg:name'
形式的字串。 - 清單會以元組表示,且字典會轉換為可變動的新字典。這些元素的元素會以遞迴方式轉換。
- 傳回
select
值時,其內容會依上述說明轉換。 - 在規則例項化期間未指定值,且系統計算出預設值的屬性,會從結果中排除。(計算的預設值必須在分析階段才能計算)。
請盡可能只在規則完成器符號巨集的實作函式中使用這個函式。不建議在其他情境中使用此函式,且在未來的 Bazel 版本中會停用此函式;這會導致 BUILD
檔案變得脆弱且依序依賴。此外,請注意,這與將規則屬性值從內部格式轉換為 Starlark 的其他兩種轉換方式略有不同:一種是用於計算預設值,另一種是用於 ctx.attr.foo
。
參數
參數 | 說明 |
---|---|
name
|
string;
必要 目標的名稱。 |
existing_rules
unknown existing_rules()傳回不可變的 dict 類物件,描述目前在這個執行緒套件中執行個體化的規則。類似字典的物件每個項目都會將規則執行個體的名稱對應至
existing_rule(name)
會傳回的結果。此處的「類似字典物件」意指一個非常不可變的物件 x
,支援類似字典的疊代、len(x)
、name in x
、x[name]
、x.get(name)
、x.items()
、x.keys()
和 x.values()
。
請盡可能只在規則完成器符號巨集的實作函式中使用這個函式。在其他情況下使用這個函式,並不會重複使用,而且會在日後的 Bazel 版本中停用。它會讓 BUILD
檔案顯得友善且依順序而異。
exports_files
None
exports_files(srcs, visibility=None, licenses=None)
指定這個套件的哪個檔案匯出至其他套件。
參數
參數 | 說明 |
---|---|
srcs
|
字串序列;
必要 The list of files to export. |
visibility
|
sequence;或 None ;
預設值為 None 可以指定瀏覽權限宣告。指定目標就能看到這些檔案。如未指定瀏覽權限,每個套件都能看到檔案。 |
licenses
|
字串字串的序列;或 None ;預設為 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
|
int;
預設為 1 標示是否要排除目錄。 |
allow_empty
|
預設值為 unbound Glob 模式是否允許比對空值。如果「allow_empty」為 False,每個個別 include 模式都必須相符,且最終結果也必須為非空白 (排除「Exclude」模式的相符結果後)。 |
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/package/BUILD
中,其值會是 some/package
。如果 BUILD 檔案呼叫了 .bzl 檔案中定義的函式,package_name()
會與呼叫端的 BUILD 檔案套件相符。
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 物件,系統會依原樣傳回該物件。 |
repo_name
string repo_name()包含目前評估中的套件存放區的標準名稱,開頭沒有 @ 符號。
repository_name
string repository_name()Experimental。這個 API 仍在實驗階段,可能隨時變更。請勿仰賴這項功能。您可以藉由設定
--+incompatible_enable_deprecated_label_apis
,以實驗性方式啟用此功能。最好改用
repo_name
,因為這個方法不包含開頭的符號,但運作方式相同。含有目前正在評估套件的存放區標準名稱,前面加上一個簽名 (@
)。舉例來說,在 WORKSPACE 段落 local_repository(name='local', path=...)
呼叫的套件中,會將其設為 @local
。在主要存放區的套件中,會設為 @
。
選取
unknown select(x, no_match_error='')
select()
是使規則屬性「可設定」的輔助函式。詳情請參閱建構百科全書。
參數
參數 | 說明 |
---|---|
x
|
dict;
必要 將設定條件對應至值的 。每個鍵都是用於識別 config_setting 或 constraint_value 執行個體的標籤或標籤字串。如要瞭解使用標籤 (而非字串) 的時機,請參閱巨集說明文件。 |
no_match_error
|
string;
預設值為 '' 如果沒有符合條件,要回報的自訂錯誤 (選用)。 |
子套件
sequence subpackages(include, exclude=[], allow_empty=False)傳回目前套件每個直接子套件的新可變動清單,無論檔案系統目錄深度為何。傳回的清單經過排序,且包含與目前套件相關的子套件名稱。建議您使用 bazel_skylib.subpackages 模組中的函式,而非直接呼叫這個函式。
參數
參數 | 說明 |
---|---|
include
|
字串的序列;
必要 Glob 模式清單,用於在子套件掃描中加入。 |
exclude
|
字串的序列;預設值為 [] 。 Glob 模式清單,用於從子套件掃描中排除。 |
allow_empty
|
bool;
預設為 False 如果呼叫傳回空白清單,是否失敗。根據預設,空白清單表示 BUILD 檔案中對 subpackages() 的呼叫是多餘的,因此可能發生錯誤。將其設為 true 可讓這個函式在這種情況下成功。 |