成員
- depset
- existing_rule
- existing_rules
- exports_files
- glob
- module_name
- module_version
- package_group
- package_name
- package_relative_label
- repository_name
- 選取
- 子套件
解壓縮
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
|
sequence 或 None ;預設值為 None 依附元件的直接元素清單。 |
order
|
預設值為 "default" 新變數的周遊策略。如要查看可能的值,請參閱這篇文章。 |
transitive
|
depset 的sequence;或 None ;預設值為 None 此為依附元件清單,其中元素會成為解碼器的間接元素。 |
existing_rule
unknown existing_rule(name)傳回類似字典的不可變更物件,該物件會描述在這個執行緒套件中例項化的規則屬性;如果沒有任何該名稱的規則例項,則傳回
None
。此處的「不可變的 dict 物件」是指深度不可變更的物件 x
,支援類似 dict 的疊代、len(x)
、name in x
、x[name]
、x.get(name)
、x.items()
、x.keys()
和 x.values()
。
如果設定了 --noincompatible_existing_rules_immutable_view
旗標,則會改為傳回含有相同內容的新可變動字典。
結果會包含每個屬性的項目,但私人屬性 (名稱開頭不是字母) 和一些無法代表的舊版屬性類型除外。此外,字典包含規則例項 name
和 kind
的項目 (例如 '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 x
、x[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
|
字串的序列;預設值為 [] 要納入的 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/package
。some/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
|
string 的 sequence;必要 要納入子套件掃描的 glob 模式清單。 |
exclude
|
「string」序列;預設值為 [] 從子套件掃描中排除的 glob 模式清單。 |
allow_empty
|
預設值為 False 表示呼叫是否傳回空白清單。根據預設,空白清單代表 BUILD 檔案可能發生了超大量的 subpackages() 呼叫。如果設為 true,這個函式就會執行成功。 |