內建模組,支援原生規則和其他套件輔助函式。所有原生規則都會以函式形式顯示在這個模組中,例如 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
- subpackages
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()
的深度不可變動物件。
結果會包含每個屬性的項目,但名稱開頭不是字母的私有屬性,以及少數無法表示的舊版屬性類型除外。此外,字典也包含規則例項的 name
和 kind
項目 (例如 'cc_binary'
)。
結果的值代表屬性值,如下所示:
- str、int 和 bool 類型的屬性會照原樣表示。
- 標籤會轉換為
':foo'
形式的字串 (適用於同一套件中的目標),或'//pkg:name'
形式的字串 (適用於不同套件中的目標)。 - 清單會以元組表示,字典則會轉換為新的可變動字典。系統會以相同方式遞迴轉換這些元素。
select
值會傳回,且內容會如上所述轉換。- 系統會從結果中排除在規則例項化期間未指定值,且已計算預設值的屬性。(在分析階段完成前,無法計算預設值)。
請盡量避免使用這項功能。這會導致 BUILD 檔案脆弱且依附於順序。此外,請注意,從內部表單到 Starlark 的規則屬性值轉換,與其他兩種轉換略有不同:一種用於計算預設值,另一種用於 ctx.attr.foo
。
參數
參數 | 說明 |
---|---|
name
|
string;必要
目標的名稱。 |
existing_rules
unknown native.existing_rules()
existing_rule(name)
傳回的結果。這裡的「不可變動的類似字典物件」是指支援類似字典的疊代、x
、len(x)
、name in x
、x[name]
、x.get(name)
、x.items()
、x.keys()
和 x.values()
的深度不可變動物件。
注意:請盡量避免使用這項功能。這會導致 BUILD 檔案脆弱且依附於順序。
exports_files
None
native.exports_files(srcs, visibility=None, licenses=None)
參數
參數 | 說明 |
---|---|
srcs
|
string 的序列;必要
要匯出的檔案清單。 |
visibility
|
sequence 或 None ;預設值為 None 可指定顯示設定。指定目標就能看到檔案。如未指定顯示設定,所有套件都能看到檔案。 |
licenses
|
string 的序列;或 None ;預設值為 None 。要指定的授權。 |
glob
sequence native.glob(include=[], exclude=[], exclude_directories=1, allow_empty=unbound)
- 符合
include
中的至少一個模式。 - 與
exclude
中的任何模式都不相符 (預設為[]
)。
exclude_directories
引數 (設為 1
),結果會省略目錄類型的檔案 (預設為 1
)。
參數
參數 | 說明 |
---|---|
include
|
字串的序列;預設為 [] 要納入的 glob 模式清單。 |
exclude
|
字串序列;預設為 [] 要排除的 glob 模式清單。 |
exclude_directories
|
int;預設為 1 ,表示是否要排除目錄的旗標。 |
allow_empty
|
預設值為 unbound 是否允許 glob 模式不比對任何內容。如果 `allow_empty` 為 False,則每個個別的包含模式都必須相符,且最終結果不得為空 (排除 `exclude` 模式的相符項目後)。 |
module_name
string native.module_name()
module_ctx.modules
中顯示的 module.name
欄位相同。
可能會傳回 None
。
module_version
string native.module_version()
module_ctx.modules
中顯示的 module.version
欄位相同。
可能會傳回 None
。
package_group
None
native.package_group(name, packages=[], includes=[])
visibility
屬性中參照。
參數
參數 | 說明 |
---|---|
name
|
string;必要
這項規則的專屬名稱。 |
packages
|
字串的序列;
預設為 [] 這個群組中所有套件的完整列舉。 |
includes
|
字串的序列;
預設為 [] 這個套件群組中包含的其他套件群組。 |
package_name
string native.package_name()
some/package/BUILD
中,這個值會是 some/package
。如果 BUILD 檔案呼叫 .bzl 檔案中定義的函式,package_name()
會比對呼叫端 BUILD 檔案套件。
package_relative_label
Label native.package_relative_label(input)
BUILD
檔案) 內容中,將輸入字串轉換為 Label 物件。如果輸入內容已是 Label
,則會以原值傳回。這個函式只能在評估 BUILD 檔案和直接或間接呼叫的巨集時呼叫,不得在 (例如) 規則實作函式中呼叫。
這個函式的結果與將指定字串傳遞至 BUILD 檔案中宣告的目標標籤值屬性所產生的 Label
值相同。
使用注意事項:這個函式與 Label() 的差異在於,Label()
會使用呼叫它的 .bzl
檔案套件的內容,而不是 BUILD
檔案的套件。如需參照巨集硬式編碼的固定目標 (例如編譯器),請使用 Label()
。如要將 BUILD 檔案提供的標籤字串正規化為 Label
物件,請使用 package_relative_label()
。(在 BUILD 檔案或呼叫 .bzl 檔案以外的套件環境中,無法將字串轉換為 Label
。因此,外部巨集應一律優先將 Label 物件傳遞至內部巨集,而非標籤字串。)
參數
參數 | 說明 |
---|---|
input
|
string;或 Label;必要 輸入標籤字串或 Label 物件。如果傳遞的是 Label 物件,則會原封不動地傳回該物件。 |
repo_name
string native.repo_name()
repository_name
string native.repository_name()
--+incompatible_enable_deprecated_label_apis
Deprecated.,以實驗性質啟用這項功能。建議改用
repo_name
,這個函式不會包含多餘的前置 @ 符號,但行為與其他函式相同。存放目前評估套件的存放區正式名稱,並加上單一 @ 符號 (@
) 前置字元。舉例來說,在由 WORKSPACE 節 local_repository(name='local', path=...)
呼叫而建立的套件中,這個值會設為 @local
。在主要存放區的套件中,這項設定會設為 @
。
子檔案包
sequence native.subpackages(include, exclude=[], allow_empty=False)
參數
參數 | 說明 |
---|---|
include
|
字串的序列;
必要 要在子封包掃描中納入的 glob 模式清單。 |
exclude
|
字串序列;預設為 [] 從子封裝掃描中排除的 glob 模式清單。 |
allow_empty
|
bool;預設值為 False 如果呼叫傳回空白清單,是否會失敗。根據預設,空白清單表示 BUILD 檔案中可能發生錯誤,因為對 subpackages() 的呼叫是多餘的。設為 true 可讓這項函式在該情況下成功運作。 |