native.cc_library
。請注意,原生模組只能在載入階段中使用 (例如巨集,不適用於規則導入)。屬性會忽略 None
值,並將其視為未設定屬性。您也可以使用下列函式:
成員
- existing_rule
- existing_rules
- exports_files
- glob
- package_group
- package_name
- package_relative_label
- 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()
。
如果設定 --noincompatible_existing_rules_immutable_view
標記,則會改為傳回具有相同內容的新可變動字典。
結果包含每個屬性的項目,但私人屬性 (名稱不以字母開頭) 和幾個無法表示的舊版屬性類型除外。此外,字典還包含規則例項的 name
和 kind
項目 (例如 '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 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 ;
requiredThe list of files to export. |
visibility
|
sequence; or None ;
預設值 = 無可以指定瀏覽權限宣告。指定的目標將可看到這些檔案。如果未指定可見度,則所有套件都能看到這些檔案。 |
licenses
|
sequence of strings; or 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,則每個個別的加入模式都必須符合某個項目,且最終結果也必須非空白 (排除 `exclude` 模式的符合項目後)。 |
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 檔案及其直接或間接呼叫時,才能呼叫此函式。可能不會 (例如) 規則實作函式呼叫。
這個函式的結果與 Label
值相同,如果將指定字串傳遞至 BUILD 檔案中宣告的目標標籤值屬性,也會產生相同的結果。
使用注意事項:這個函式與 Label() 的差異,在於 Label()
使用呼叫該檔案的 .bzl
檔案套件的內容,而非 BUILD
檔案的套件。如需參照已在巨集中硬式編碼的固定目標 (例如編譯器),請使用 Label()
。當您需要將 BUILD 檔案提供的標籤字串正規化為 Label
物件時,請使用 package_relative_label()
。(除了 BUILD 檔案或呼叫的 .bzl 檔案,在套件內容中無法將字串轉換為 Label
。因此,外部巨集最好一律將標籤物件傳遞至內部巨集,而不是標籤字串)。
參數
參數 | 說明 |
---|---|
input
|
string; or Label ;
requiredinput 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 ;
requiredGlob 模式清單,用於在子套件掃描中納入。 |
exclude
|
sequence of strings ;
預設 = []要從子套件掃描作業中排除的 glob 模式清單。 |
allow_empty
|
預設值 = 否 指出呼叫傳回空白清單時是否會失敗。根據預設,空白清單表示 BUILD 檔案中對 subpackages() 的呼叫是多餘的,因此可能發生錯誤。將其設為 true 可讓這個函式在這種情況下成功。 |