原生

內建模組,可支援原生規則和其他套件輔助函式。所有原生規則都會顯示為此模組中的函式,例如 native.cc_library。請注意,原生模組只能在載入階段中使用 (例如巨集,不適用於規則導入)。屬性會忽略 None 值,並將其視為未設定屬性。
您也可以使用下列函式:

成員

existing_rule

unknown native.existing_rule(name)

傳回類似字典的不可變物件,該物件會說明在此執行緒套件中執行個體化的規則屬性;如果名稱沒有規則執行個體,則傳回 None

此處的「類似字典物件」意指一個非常不可變的物件 x,支援類似字典的疊代、len(x)name in xx[name]x.get(name)x.items()x.keys()x.values()

如果設定 --noincompatible_existing_rules_immutable_view 標記,則會改為傳回具有相同內容的新可變動字典。

結果包含每個屬性的項目,但私人屬性 (名稱不以字母開頭) 和幾個無法表示的舊版屬性類型除外。此外,字典中包含規則例項的 namekind (例如 'cc_binary') 項目。

結果的值代表屬性值,如下所示:

  • 屬性類型為 str、int 和 bool 時,會以原樣表示。
  • 標籤會轉換為字串,如果是同一個套件中的目標,則為 ':foo' 格式;如果是不同套件中的目標,則為 '//pkg:name' 格式。
  • 清單會以元組表示,字典會轉換為可變動的字典。其元素會以相同方式遞迴轉換。
  • select 值會傳回,且內容會按照上述方式轉換。
  • 在規則例項化期間未指定值,且系統已計算出預設值的屬性,會從結果中排除。(計算的預設值必須在分析階段後才能計算)。

請盡量避免使用此函式。這會導致 BUILD 檔案變得脆弱且依序依賴。此外,請注意,這與將規則屬性值從內部格式轉換為 Starlark 的其他兩種轉換方式略有不同:一種是運算預設值使用,另一種是 ctx.attr.foo 使用。

參數

參數 說明
name required
目標的名稱。

existing_rules

unknown native.existing_rules()

傳回不可變動的字典類型物件,描述目前在這個執行緒套件中已例項化的規則。類似字典的物件每個項目都會將規則執行個體的名稱對應至 existing_rule(name) 會傳回的結果。

在此,不可變動的字典類型物件是指深層不可變動的物件 x,可支援字典類型的疊代作業、len(x)name in xx[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; required
The list of files to export.
visibility sequence; or None; default = None
您可以指定可見度宣告。指定的目標將可看到這些檔案。如未指定瀏覽權限,每個套件都能看到檔案。
licenses sequence of strings; or None; default = None
Licenses to be specified.

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,則每個個別的加入模式都必須符合某個項目,且最終結果也必須非空白 (排除 `exclude` 模式的符合項目後)。

module_name

string native.module_name()

與此套件所在的 repo 相關聯的 Bazel 模組名稱。如果這個套件來自 WORKSPACE 中定義的存放區,而非 MODULE.bazel,則這個值會是空白。如果是模組擴充功能產生的 repo,則為代管擴充功能的模組名稱。這與 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_NAME

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; or Label; required
input label string 或 Label 物件。如果傳遞 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 sequence of strings; required
Glob 模式清單,用於在子套件掃描中納入。
exclude sequence of strings; default = []
Glob 模式清單,用於從子套件掃描中排除。
allow_empty default = False
如果呼叫傳回空白清單,是否失敗。根據預設,空白清單代表 BUILD 檔案中的潛在錯誤,其中呼叫 subpackages() 非常嚴重。將其設為 true 可讓這個函式在這種情況下成功。