native.cc_library
。請注意,原生模組只能在載入階段中使用 (即巨集,不適用於規則實作)。屬性會忽略 None
值,並視為未設定屬性。您也可以使用下列函式:
會員
- existing_rule
- existing_rules
- exports_files
- glob
- module_name
- module_version
- package_group
- package_name
- package_relative_label
- repo_name
- repository_name
- 子套件
existing_rule
unknown native.existing_rule(name)傳回類似且不可變更的字典物件,該物件用於描述在此執行緒套件中例項化的規則屬性;如果沒有該名稱的規則例項,則傳回
None
。這裡的「不可變更的字典物件」意指深不可變更的物件 x
,支援類似字典的疊代、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()傳回不可變動的 dict 物件,描述此執行緒套件中目前執行個體化的規則。類似字典的物件,每個項目都會將規則例項的名稱對應至
existing_rule(name)
傳回的結果。這裡的「不可變更的字典物件」意指深不可變更的物件 x
,支援類似字典的疊代、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 of strings ;必要要匯出的檔案清單。 |
visibility
|
sequence; or None ;
default = None可指定瀏覽權限宣告。指定的目標使用者可以看到檔案。如未指定瀏覽權限,則每個套件都會顯示檔案。 |
licenses
|
sequence of strings; or None ;
default = None要指定的授權。 |
glob
sequence native.glob(include=[], exclude=[], exclude_directories=1, allow_empty=unbound)Glob 會傳回目前套件中,每個檔案且經過排序的全新可變動清單:
- 在
include
中至少找到一個模式。 - 不符合
exclude
中的任何模式 (預設為[]
)。
exclude_directories
引數 (設為 1
),結果中會忽略類型目錄的檔案 (預設為 1
)。
參數
參數 | 說明 |
---|---|
include
|
sequence of strings ;
default = []要納入的 glob 模式清單。 |
exclude
|
sequence of strings ;
default = []要排除的 glob 模式清單。 |
exclude_directories
|
default = 1 是否要排除目錄的標記。 |
allow_empty
|
default = 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
|
sequence of strings ;
default = []這個群組中套件的完整列舉。 |
includes
|
sequence of strings ;
default = []此項目中包含的其他套件群組。 |
package_name
string native.package_name()接受評估的套件名稱,不含存放區名稱。例如,在 BUILD 檔案
some/package/BUILD
中,其值為 some/package
。如果 BUILD 檔案呼叫 .bzl 檔案中定義的函式,package_name()
就會比對呼叫端 BUILD 檔案套件。
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; or Label ;必要輸入標籤字串或標籤物件。如果傳遞了 Label 物件,系統會依原樣傳回該物件。 |
repo_name
string native.repo_name()含有目前正在評估套件的存放區正規名稱,沒有前置符號。
repository_name
string native.repository_name()實驗功能。這個 API 仍在實驗階段,隨時可能變更。請勿依附於此項目。如要採用實驗功能,可透過設定
--+incompatible_enable_deprecated_label_apis
已淘汰改用
repo_name
含有目前正在評估套件的存放區正規名稱,前面加上一個 @ 符號 (@
)。例如,在 WORKSPACE Stanza local_repository(name='local', path=...)
呼叫的套件中,系統會將套件設為 @local
。在主要存放區的套件中,系統會將其設為 @
。
子檔案包
sequence native.subpackages(include, exclude=[], allow_empty=False)無論檔案系統目錄深度為何,傳回目前套件每個直接子套件的全新可變動清單。傳回的清單會經過排序,其中包含與目前套件相對的子套件名稱。建議改用 bazel_skylib.subpackages 模組中的方法,不要直接呼叫這個函式。
參數
參數 | 說明 |
---|---|
include
|
sequence of strings ;必要要納入子套件掃描作業的 glob 模式清單。 |
exclude
|
sequence of strings ;
default = []要從子套件掃描中排除的 glob 模式清單。 |
allow_empty
|
default = False 表示呼叫傳回空白清單時是否會失敗。根據預設,空白清單表示 BUILD 檔案中,呼叫 subpackages() 極為嚴重的錯誤。如果將值設為 true,此函式就能在這種情況下成功執行。 |