native.cc_library
。請注意,原生模組只能在載入階段使用 (亦即用於巨集,不適用於規則導入)。屬性會忽略 None
值,並將其視為屬性未設定。您也可以使用下列函式:
成員
- existing_rule
- existing_rules
- exports_files
- glob
- module_name
- module_version
- package_group
- package_name
- package_relative_label
- repository_name
- 子套件
existing_rule
unknown native.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 native.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
native.exports_files(srcs, visibility=None, licenses=None)
指定從這個套件匯出至其他套件的檔案清單。
參數
參數 | 說明 |
---|---|
srcs
|
字串的 sequence;必要 要匯出的檔案清單。 |
visibility
|
sequence 或 None ;預設值為 None 可指定瀏覽權限宣告。檔案可向指定目標顯示。如果沒有指定瀏覽權限,每個套件都能查看檔案。 |
licenses
|
字串的 sequence 或 None ;預設為 None 必須指定授權。 |
glob
sequence native.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 native.module_name()與這個套件的存放區相關聯的 Bazel 模組名稱。如果這個套件來自 WORKSPACE 中定義的存放區,而非 MODULE.bazel,則這個套件沒有任何內容。如為由模組擴充功能產生的存放區,這就是代管擴充功能的模組名稱。與
module_ctx.modules
中顯示的 module.name
欄位相同。可能會傳回 None
。module_version
string native.module_version()與這個套件的存放區相關聯的 Bazel 模組版本。如果這個套件來自 WORKSPACE 中定義的存放區,而非 MODULE.bazel,則這個套件沒有任何內容。針對由模組擴充功能產生的存放區,這是代管擴充功能的模組版本。與
module_ctx.modules
中顯示的 module.version
欄位相同。可能會傳回 None
。package_group
None
native.package_group(name, packages=[], includes=[])
這個函式會定義一組套件,並將標籤指派給群組。您可以在 visibility
屬性中參照這個標籤。
參數
參數 | 說明 |
---|---|
name
|
必填 這項規則的專屬名稱。 |
packages
|
字串的序列;預設值為 [] 這個群組中的套件完整列舉。 |
includes
|
字串的序列;預設值為 [] 此套件中包含的其他套件群組。 |
package_name
string native.package_name()接受評估的套件名稱。例如,在 BUILD 檔案中,其值為
some/package
。some/package/BUILD
如果 BUILD 檔案呼叫在 .bzl 檔案中定義的函式,package_name()
會與呼叫端 BUILD 檔案套件比對。此函式等同於已淘汰的變數 PACKAGE_NAME
。
package_relative_label
Label native.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 native.repository_name()呼叫規則或建構擴充功能的存放區名稱。例如,如果 WORKSPACE 空白區
local_repository(name='local', path=...)
呼叫存在的套件,這個套件會設為 @local
。在主要存放區中的套件中,系統會將它設為 @
。此函式等同於已淘汰的變數 REPOSITORY_NAME
。
子套件
sequence native.subpackages(include, exclude=[], allow_empty=False)傳回目前套件中所有直接子套件的新可變動清單,無論檔案系統目錄深度為何。傳回的清單會經過排序,其中包含與目前套件相關的子套件名稱。建議優先使用 bazel_skylib.subpackages 模組中的方法,而不要直接呼叫此函式。
參數
參數 | 說明 |
---|---|
include
|
string 的 sequence;必要 要納入子套件掃描的 glob 模式清單。 |
exclude
|
「string」序列;預設值為 [] 從子套件掃描中排除的 glob 模式清單。 |
allow_empty
|
預設值為 False 表示呼叫是否傳回空白清單。根據預設,空白清單代表 BUILD 檔案可能發生了超大量的 subpackages() 呼叫。如果設為 true,這個函式就會執行成功。 |