建置檔案

回報問題 夜間 7.4 ,直接在 Google Cloud 控制台實際操作。 7.3 7.2 7.1 7.0 6.5

BUILD 檔案中可用方法。如要瞭解其他函式和建構規則 (也可用於 BUILD 檔案),請參閱「建構百科全書」。

成員

depset

depset depset(direct=None, order="default", *, transitive=None)

建立 depsetdirect 參數是 Depset 的直接元素清單,而 transitive 參數是一系列依附元件,其元素會成為所建立 Depset 的間接元素。將 Depset 轉換為清單時,元素傳回的順序是由 order 參數指定。詳情請參閱「Depset 總覽」。

依據 type(x) 運算式取得的 depset 中,所有元素 (直接和間接) 都必須是相同類型。

由於以雜湊為基礎的集合會在疊代期間用於消除重複項目,因此 depset 的所有元素都應可雜湊。不過,目前並未在所有建構函式中一致檢查此不變量。使用 --incompatible_always_check_depset_elements 標記啟用一致的檢查功能;這將成為日後版本中的預設行為;請參閱問題 10313

此外,元素目前必須是不可變動的,但這項限制日後會放寬。

建立的 depset 順序應與其 transitive depset 順序相容。「"default"」訂單與其他訂單相容,所有其他訂單都只能與自己相容。

參數

參數 說明
direct sequenceNone;預設為 None
。 depset 的直接元素清單。
order string; 預設為 "default"
。 新 depset 的遍歷策略。如要查看可能的值,請參閱這裡
transitive depset序列;或 None; 預設為 None
depset 清單,其中元素會成為 depset 的間接元素。

existing_rule

unknown existing_rule(name)

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

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

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

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

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

如果可能,請只在規則最終符號巨集的實作函式中使用這個函式。在其他情況下使用這個函式,並不會重複使用,而且會在日後的 Bazel 版本中停用。它會讓 BUILD 檔案顯得友善且依順序而異。另請注意,這與內部形式至 Starlark 的兩種規則屬性值有細微差異:運算預設值使用,另一個用於 ctx.attr.foo

參數

參數 說明
name 字串; 必要
目標的名稱。

existing_rules

unknown existing_rules()

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

在此,不可變動的字典類型物件是指深層不可變動的物件 x,可支援字典類型的疊代作業、len(x)name in xx[name]x.get(name)x.items()x.keys()x.values()

請盡可能只在規則完成器符號巨集的實作函式中使用這個函式。不建議在其他情境中使用此函式,且將在未來的 Bazel 版本中停用;這會導致 BUILD 檔案變得脆弱且依序依賴。

exports_files

None exports_files(srcs, visibility=None, licenses=None)

指定這個套件的哪個檔案匯出至其他套件。

參數

參數 說明
srcs 字串序列; 必要
The list of files to export.
visibility sequence;或 None; 預設值為 None
可以指定瀏覽權限宣告。指定目標就能看到這些檔案。如果未指定顯示設定,所有套件都會看到這些檔案。
licenses 字串序列;或 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 int; 預設為 1
標示是否要排除目錄。
allow_empty 預設值為 unbound
Glob 模式是否允許比對空值。如果「allow_empty」為 False,每個個別 include 模式都必須相符,且最終結果也必須為非空白 (排除「Exclude」模式的相符結果後)。

module_name

string module_name()

與這個套件的存放區相關聯的 Bazel 模組名稱。如果這個套件來自 WORKSPACE 中定義的存放區,而非 MODULE.bazel,這裡會是空的。如果是模組擴充功能產生的 repo,則為代管擴充功能的模組名稱。與 module_ctx.modules 中顯示的 module.name 欄位相同。 可能會傳回 None

module_version

string module_version()

與此套件所在的 repo 相關聯的 Bazel 模組版本。如果這個套件來自 WORKSPACE 中定義的存放區,而非 MODULE.bazel,則這個值會是空白。對於由模組擴充功能產生的存放區,這是代管擴充功能的模組版本。與 module_ctx.modules 中顯示的 module.version 欄位相同。 可能會傳回 None

package_group

None package_group(name, packages=[], includes=[])

這個函式會定義一組套件,並為群組指派標籤。您可以在 visibility 屬性中參照這個標籤。

參數

參數 說明
name string; 必要
這項規則的專屬名稱。
packages 字串序列; 預設值為 []
這個群組中完整的套件列舉。
includes 字串序列;預設為 []
。 此套件中包含的其他套件群組。

package_name

string package_name()

要評估的套件名稱,不含存放區名稱。例如,在 BUILD 檔案 some/package/BUILD 中,其值將是 some/package。如果 BUILD 檔案呼叫 .bzl 檔案中定義的函式,package_name() 會比對呼叫端 BUILD 檔案套件。

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。因此,外部巨集應一律優先將 Label 物件傳遞至內部巨集,而非標籤字串。)

參數

參數 說明
input 字串Label; 必填
Label 輸入字串或 Label 物件。如果傳遞 Label 物件,系統會原封不動地傳回該物件。

repo_name

string repo_name()

包含目前評估中的套件存放區的標準名稱,開頭沒有 @ 符號。

repository_name

string repository_name()

實驗功能。這個 API 仍在實驗階段,可能隨時變更。請勿仰賴這項功能。您可以藉由設定 --+incompatible_enable_deprecated_label_apis
,以實驗性方式啟用此功能。建議改用 repo_name,因為它不含多餘的前置 @ 符號,但其他行為都相同。

含有目前正在評估套件的存放區標準名稱,前面加上一個簽名 (@)。舉例來說,在 WORKSPACE 段落 local_repository(name='local', path=...) 呼叫的套件中,會將其設為 @local。在主要存放區的套件中,會設為 @

選取

unknown select(x, no_match_error='')

select() 是輔助函式,可讓規則屬性可設定。詳情請參閱「建構百科全書」。

參數

參數 說明
x dict; 必要
將設定條件對應至值的 。每個鍵都是用於識別 config_setting 或 constraint_value 執行個體的標籤或標籤字串。如要瞭解何時應使用標籤而非字串,請參閱 巨集說明文件
no_match_error 字串;預設為 ''
。 如果沒有任何條件符合,可選擇回報自訂錯誤。

子套件

sequence subpackages(include, exclude=[], allow_empty=False)

傳回目前套件每個直接子套件的新可變動清單,無論檔案系統目錄深度為何。傳回的清單會排序,並包含相對於目前套件的子套件名稱。建議您使用 bazel_skylib.subpackages 模組中的函式,而非直接呼叫這個函式。

參數

參數 說明
include 字串序列; 必要
Glob 模式清單,用於在子套件掃描中加入。
exclude 字串序列; 預設值為 []
要從子套件掃描作業中排除的 glob 模式清單。
allow_empty bool; 預設值為 False
指出呼叫傳回空白清單時是否會失敗。根據預設,空白清單表示 BUILD 檔案中對 subpackages() 的呼叫是多餘的,因此可能發生錯誤。如果設為 true,這個函式將可成功執行。