Attr

這是頂層模組,用於定義規則或層面的屬性結構定義。每個函式都會傳回代表單一屬性結構定義的物件。這些物件會做為 rule()aspect()repository_rule()tag_class()attrs 字典引數值。

如要進一步瞭解如何定義使用屬性,請參閱「規則」頁面。

成員

bool

Attribute attr.bool(configurable=unbound, default=False, doc=None, mandatory=False)

為布林屬性建立結構定義。對應的 ctx.attr 屬性類型為 bool

參數

參數 說明
configurable bool 或未繫結; 預設為 unbound
這個引數只能針對符號巨集的屬性指定。

如果 configurable 明確設為 False,符號巨集屬性就無法設定,也就是說,不能採用 select() 值。如果 configurable 未繫結或明確設為 True,則屬性可設定,且可採用 select() 值。

如果是規則或層面的屬性,則必須將 configurable 保持未繫結狀態。大多數 Starlark 規則屬性一律可設定,但 attr.output()attr.output_list()attr.license() 規則屬性除外,這些屬性一律無法設定。

default bool; 預設值為 False
如果例項化規則時未提供這項屬性的值,則使用預設值。
doc string;或 None;預設為 None
可由文件生成工具擷取的屬性說明。
mandatory bool; 預設值為 False
如果為 true,則必須明確指定值 (即使有 default 也是如此)。

int

Attribute attr.int(configurable=unbound, default=0, doc=None, mandatory=False, values=[])

為整數屬性建立結構定義。值必須在帶正負號的 32 位元範圍內。對應的 ctx.attr 屬性類型為 int

參數

參數 說明
configurable bool 或未繫結; 預設為 unbound
這個引數只能針對符號巨集的屬性指定。

如果 configurable 明確設為 False,符號巨集屬性就無法設定,也就是說,不能採用 select() 值。如果 configurable 未繫結或明確設為 True,則屬性可設定,且可採用 select() 值。

如果是規則或層面的屬性,則必須將 configurable 保持未繫結狀態。大多數 Starlark 規則屬性一律可設定,但 attr.output()attr.output_list()attr.license() 規則屬性除外,這些屬性一律無法設定。

default int; default is 0
A default value to use if no value for this attribute is given when instantiating the rule.
doc string;或 None;預設為 None
可由文件生成工具擷取的屬性說明。
mandatory bool; 預設值為 False
如果為 true,則必須明確指定值 (即使有 default 也是如此)。
values int序列; 預設值為 []
屬性的允許值清單。如果提供任何其他值,系統就會發出錯誤。

int_list

Attribute attr.int_list(mandatory=False, allow_empty=True, *, configurable=unbound, default=[], doc=None)

為整數清單屬性建立結構定義。每個元素都必須在帶正負號的 32 位元範圍內。

參數

參數 說明
mandatory bool; 預設值為 False
如果為 true,則必須明確指定值 (即使有 default 也是如此)。
allow_empty bool;預設為 True
如果屬性可以空白,則為 True。
configurable bool 或未繫結; 預設為 unbound
這個引數只能針對符號巨集的屬性指定。

如果 configurable 明確設為 False,符號巨集屬性就無法設定,也就是說,不能採用 select() 值。如果 configurable 未繫結或明確設為 True,則屬性可設定,且可採用 select() 值。

如果是規則或層面的屬性,則必須將 configurable 保持未繫結狀態。大多數 Starlark 規則屬性一律可設定,但 attr.output()attr.output_list()attr.license() 規則屬性除外,這些屬性一律無法設定。

default sequence of ints; default is []
A default value to use if no value for this attribute is given when instantiating the rule.
doc string;或 None;預設為 None
可由文件生成工具擷取的屬性說明。

標籤

Attribute attr.label(configurable=unbound, default=None, materializer=None, doc=None, executable=False, allow_files=None, allow_single_file=None, mandatory=False, skip_validations=False, providers=[], for_dependency_resolution=unbound, allow_rules=None, cfg=None, aspects=[], flags=[])

建立標籤屬性的結構定義。這是依附元件屬性。

這項屬性包含不重複的 Label 值。如果提供字串來取代 Label,系統會使用標籤建構函式轉換字串。標籤路徑的相對部分 (包括可能已重新命名的存放區) 會根據例項化目標的套件解析。

在分析期間 (規則實作函式內),從 ctx.attr 擷取屬性值時,標籤會替換為對應的 Target。這可讓您存取目前目標依附元件的供應商。

除了普通來源檔案,這類屬性通常也用於參照工具 (例如編譯器)。這類工具會視為依附元件,就像來源檔案一樣。如要避免使用者在 BUILD 檔案中使用規則時,每次都必須指定工具的標籤,您可以將標準工具的標籤硬式編碼為這個屬性的 default 值。如要禁止使用者覆寫這個預設值,可以為屬性指派底線開頭的名稱,將屬性設為私有。詳情請參閱「規則」頁面。

參數

參數 說明
configurable bool 或未繫結; 預設為 unbound
這個引數只能針對符號巨集的屬性指定。

如果 configurable 明確設為 False,符號巨集屬性就無法設定,也就是說,不能採用 select() 值。如果 configurable 未繫結或明確設為 True,則屬性可設定,且可採用 select() 值。

如果是規則或層面的屬性,則必須將 configurable 保持未繫結狀態。大多數 Starlark 規則屬性一律可設定,但 attr.output()attr.output_list()attr.license() 規則屬性除外,這些屬性一律無法設定。

default Label;或 string;或 LateBoundDefault;或 NativeComputedDefault;或 function;或 None; 預設值為 None
如果例項化規則時未提供這個屬性的值,則使用預設值。使用字串或 Label 函式指定預設值,例如 attr.label(default = "//a:b")
materializer 函式; 預設為 None
實驗性。這項參數仍在實驗階段,因此隨時可能變動。因此請勿依賴這項功能。您可以設定 --experimental_dormant_deps
,以實驗方式啟用這項功能。如果設定這個屬性,系統會從遞移閉包具體化休眠的依附元件。這個參數的值必須是函式,可存取規則屬性的值,這些屬性不是依附元件,就是標示為可供依附元件解析。視屬性類型而定,這項函式必須傳回閒置依附元件或依附元件清單
doc string;或 None;預設為 None
可由文件生成工具擷取的屬性說明。
executable bool;預設為 False
。如果依附元件必須可執行,則為 True。也就是說,標籤必須參照可執行檔,或輸出可執行檔的規則。使用 ctx.executable.<attribute_name> 存取標籤。
allow_files bool;或 sequencestring;或 None;預設值為 None
是否允許 File 目標。可以是 TrueFalse (預設值) 或允許的副檔名清單 (例如 [".cc", ".cpp"])。
allow_single_file 預設為 None
這與 allow_files 類似,但限制是標籤必須對應單一 File。如要存取,請前往 ctx.file.<attribute_name>
mandatory bool; 預設值為 False
如果為 true,則必須明確指定值 (即使有 default 也是如此)。
skip_validations bool;預設值為 False
如果為 true,系統不會執行這個屬性中遞移依附元件的驗證動作。這項措施只是暫時性緩解,日後將會移除。
providers sequence; default is []
The providers that must be given by any dependency appearing in this attribute.

這個引數的格式為提供者清單的清單,也就是 provider() 傳回的 *Info 物件 (如果是舊版提供者,則為其字串名稱)。依附元件必須傳回至少一個內部清單中提及的「所有」供應商。為方便起見,這個引數也可以是單層供應商清單,在這種情況下,該清單會包裝在含有一個元素的外層清單中。規則的依附元件「不一定」要在 provides 參數中宣傳這些供應商,但建議這麼做。

for_dependency_resolution 預設值為 unbound
如果設定此值,屬性會提供給實體化工具。只有標示相同名稱旗標的規則,才能透過這類屬性參照。
allow_rules string序列;或 None; 預設值為 None
允許哪些規則目標 (類別名稱)。
這項政策已淘汰 (僅為相容性而保留),請改用供應商。
cfg 預設值為屬性的 None
Configuration。可以是 "exec" (表示依附元件是為 execution platform 建構),也可以是 "target" (表示依附元件是為 target platform 建構)。舉例來說,在建構行動應用程式時,target platformAndroidiOS,而 execution platform 則是 LinuxmacOSWindows。如果 executable 為 True,則必須提供這項參數,以免在目標設定中意外建構主機工具。"target" 沒有語意效果,因此除非有助於釐清意圖,否則請勿在 executable 為 False 時設定。
aspects sequence of Aspects; default is []
Aspects that should be applied to the dependency or dependencies specified by this attribute.
flags 字串序列;預設為 []
已淘汰,將會移除。

label_keyed_string_dict

Attribute attr.label_keyed_string_dict(allow_empty=True, *, configurable=unbound, default={}, doc=None, allow_files=None, allow_rules=None, providers=[], for_dependency_resolution=unbound, flags=[], mandatory=False, cfg=None, aspects=[])

為保存字典的屬性建立結構定義,其中鍵為標籤,值為字串。這是依附元件屬性。

這項屬性包含不重複的 Label 值。如果提供字串來取代 Label,系統會使用標籤建構函式轉換字串。標籤路徑的相對部分 (包括可能已重新命名的存放區) 會根據例項化目標的套件解析。

在分析期間 (規則實作函式內),從 ctx.attr 擷取屬性值時,標籤會替換為對應的 Target。這樣您就能存取目前目標依附元件的供應商。

參數

參數 說明
allow_empty bool;預設為 True
如果屬性可以空白,則為 True。
configurable bool 或未繫結; 預設為 unbound
這個引數只能針對符號巨集的屬性指定。

如果 configurable 明確設為 False,符號巨集屬性就無法設定,也就是說,不能採用 select() 值。如果 configurable 未繫結或明確設為 True,則屬性可設定,且可採用 select() 值。

如果是規則或層面的屬性,則必須將 configurable 保持未繫結狀態。大多數 Starlark 規則屬性一律可設定,但 attr.output()attr.output_list()attr.license() 規則屬性除外,這些屬性一律無法設定。

default dictfunction; 預設值為 {}
如果例項化規則時未提供這個屬性的值,則要使用的預設值。請使用字串或 Label 函式指定預設值,例如 attr.label_keyed_string_dict(default = {"//a:b": "value", "//a:c": "string"})
doc string;或 None;預設為 None
可由文件生成工具擷取的屬性說明。
allow_files bool;或 sequencestring;或 None;預設值為 None
是否允許 File 目標。可以是 TrueFalse (預設值) 或允許的副檔名清單 (例如 [".cc", ".cpp"])。
allow_rules string序列;或 None; 預設值為 None
允許哪些規則目標 (類別名稱)。
這項政策已淘汰 (僅為相容性而保留),請改用供應商。
providers sequence; default is []
The providers that must be given by any dependency appearing in this attribute.

這個引數的格式為提供者清單的清單,也就是 provider() 傳回的 *Info 物件 (如果是舊版提供者,則為其字串名稱)。依附元件必須傳回至少一個內部清單中提及的「所有」供應器。為方便起見,這個引數也可以是單層供應商清單,在這種情況下,該清單會包裝在含有一個元素的外層清單中。規則的依附元件「不一定」要在 provides 參數中宣傳這些供應商,但建議這麼做。

for_dependency_resolution 預設值為 unbound
如果設定此值,屬性會提供給實體化工具。只有標示相同名稱旗標的規則,才能透過這類屬性參照。
flags 字串序列;預設為 []
已淘汰,將會移除。
mandatory bool; 預設值為 False
如果為 true,則必須明確指定值 (即使有 default 也是如此)。
cfg 預設值為屬性的 None
Configuration。可以是 "exec" (表示依附元件是為 execution platform 建構),也可以是 "target" (表示依附元件是為 target platform 建構)。建構行動應用程式時,target platform 通常是 AndroidiOS,而 execution platform 則是 LinuxmacOSWindows,這就是差異的典型例子。
aspects sequence of Aspects; default is []
Aspects that should be applied to the dependency or dependencies specified by this attribute.

label_list

Attribute attr.label_list(allow_empty=True, *, configurable=unbound, default=[], materializer=None, doc=None, allow_files=None, allow_rules=None, providers=[], for_dependency_resolution=unbound, flags=[], mandatory=False, skip_validations=False, cfg=None, aspects=[])

為標籤清單屬性建立結構定義。這是依附元件屬性。對應的 ctx.attr 屬性會是 Targetlist 類型。

這項屬性包含不重複的 Label 值。如果提供字串來取代 Label,系統會使用標籤建構函式轉換字串。標籤路徑的相對部分 (包括可能已重新命名的存放區) 會根據例項化目標的套件解析。

在分析期間 (規則實作函式內),從 ctx.attr 擷取屬性值時,標籤會替換為對應的 Target。這樣您就能存取目前目標依附元件的供應商。

參數

參數 說明
allow_empty bool;預設為 True
如果屬性可以空白,則為 True。
configurable bool 或未繫結; 預設為 unbound
這個引數只能針對符號巨集的屬性指定。

如果 configurable 明確設為 False,符號巨集屬性就無法設定,也就是說,不能採用 select() 值。如果 configurable 未繫結或明確設為 True,則屬性可設定,且可採用 select() 值。

如果是規則或層面的屬性,則必須將 configurable 保持未繫結狀態。大多數 Starlark 規則屬性一律可設定,但 attr.output()attr.output_list()attr.license() 規則屬性除外,這些屬性一律無法設定。

default Label序列;或函式; 預設值為 []
如果例項化規則時未提供這個屬性的值,則使用預設值。請使用字串或 Label 函式指定預設值,例如 attr.label_list(default = ["//a:b", "//a:c"])
materializer 函式; 預設為 None
實驗性。這項參數仍在實驗階段,因此隨時可能變動。因此請勿依賴這項功能。您可以設定 --experimental_dormant_deps
,以實驗方式啟用這項功能。如果設定這個屬性,系統會從遞移閉包具體化休眠的依附元件。這個參數的值必須是函式,可存取規則屬性的值,這些屬性不是依附元件,就是標示為可供依附元件解析。視屬性類型而定,這項函式必須傳回閒置依附元件或依附元件清單
doc string;或 None;預設為 None
可由文件生成工具擷取的屬性說明。
allow_files bool;或 sequencestring;或 None;預設值為 None
是否允許 File 目標。可以是 TrueFalse (預設值) 或允許的副檔名清單 (例如 [".cc", ".cpp"])。
allow_rules string序列;或 None; 預設值為 None
允許哪些規則目標 (類別名稱)。
這項政策已淘汰 (僅為相容性而保留),請改用供應商。
providers sequence; default is []
The providers that must be given by any dependency appearing in this attribute.

這個引數的格式為提供者清單的清單,也就是 provider() 傳回的 *Info 物件 (如果是舊版提供者,則為其字串名稱)。依附元件必須傳回至少一個內部清單中提及的「所有」供應器。為方便起見,這個引數也可以是單層供應商清單,在這種情況下,該清單會包裝在含有一個元素的外層清單中。規則的依附元件「不一定」要在 provides 參數中宣傳這些供應商,但建議這麼做。

for_dependency_resolution 預設值為 unbound
如果設定此值,屬性會提供給實體化工具。只有標示相同名稱旗標的規則,才能透過這類屬性參照。
flags 字串序列;預設為 []
已淘汰,將會移除。
mandatory bool; 預設值為 False
如果為 true,則必須明確指定值 (即使有 default 也是如此)。
skip_validations bool;預設值為 False
如果為 true,系統不會執行這個屬性中遞移依附元件的驗證動作。這項措施只是暫時性緩解,日後將會移除。
cfg 預設值為屬性的 None
Configuration。可以是 "exec" (表示依附元件是為 execution platform 建構),也可以是 "target" (表示依附元件是為 target platform 建構)。建構行動應用程式時,target platform 通常是 AndroidiOS,而 execution platform 則是 LinuxmacOSWindows,這就是差異的典型例子。
aspects Aspect序列; 預設為 []
應套用至這個屬性所指定一或多個依附元件的切面。

output

Attribute attr.output(doc=None, mandatory=False)

為輸出 (標籤) 屬性建立結構定義。

這項屬性包含不重複的 Label 值。如果提供字串來取代 Label,系統會使用標籤建構函式轉換字串。標籤路徑的相對部分 (包括可能已重新命名的存放區) 會根據例項化目標的套件解析。

在分析時,可以使用 ctx.outputs 擷取對應的 File

參數

參數 說明
doc string;或 None;預設為 None
可由文件生成工具擷取的屬性說明。
mandatory bool; 預設值為 False
如果為 true,則必須明確指定值 (即使有 default 也是如此)。

output_list

Attribute attr.output_list(allow_empty=True, *, doc=None, mandatory=False)

為輸出清單屬性建立結構定義。

這項屬性包含不重複的 Label 值。如果提供字串來取代 Label,系統會使用標籤建構函式轉換字串。標籤路徑的相對部分 (包括可能已重新命名的存放區) 會根據例項化目標的套件解析。

在分析時,可以使用 ctx.outputs 擷取對應的 File

參數

參數 說明
allow_empty bool;預設為 True
如果屬性可以空白,則為 True。
doc string;或 None;預設為 None
可由文件生成工具擷取的屬性說明。
mandatory bool; 預設值為 False
如果為 true,則必須明確指定值 (即使有 default 也是如此)。

字串

Attribute attr.string(configurable=unbound, default='', doc=None, mandatory=False, values=[])

string 屬性建立結構定義。

參數

參數 說明
configurable bool 或未繫結; 預設為 unbound
這個引數只能針對符號巨集的屬性指定。

如果 configurable 明確設為 False,符號巨集屬性就無法設定,也就是說,不能採用 select() 值。如果 configurable 未繫結或明確設為 True,則屬性可設定,且可採用 select() 值。

如果是規則或層面的屬性,則必須將 configurable 保持未繫結狀態。大多數 Starlark 規則屬性一律可設定,但 attr.output()attr.output_list()attr.license() 規則屬性除外,這些屬性一律無法設定。

default string 或 NativeComputedDefault;預設值為 ''
如果例項化規則時未提供這個屬性的值,則使用預設值。
doc string;或 None;預設為 None
可由文件生成工具擷取的屬性說明。
mandatory bool; 預設值為 False
如果為 true,則必須明確指定值 (即使有 default 也是如此)。
values 字串序列; 預設值為 []
屬性的允許值清單。如果提供任何其他值,系統就會發出錯誤。

string_dict

Attribute attr.string_dict(allow_empty=True, *, configurable=unbound, default={}, doc=None, mandatory=False)

為保存字典的屬性建立結構定義,其中的鍵和值都是字串。

參數

參數 說明
allow_empty bool;預設為 True
如果屬性可以空白,則為 True。
configurable bool 或未繫結; 預設為 unbound
這個引數只能針對符號巨集的屬性指定。

如果 configurable 明確設為 False,符號巨集屬性就無法設定,也就是說,不能採用 select() 值。如果 configurable 未繫結或明確設為 True,則屬性可設定,且可採用 select() 值。

如果是規則或層面的屬性,則必須將 configurable 保持未繫結狀態。大多數 Starlark 規則屬性一律可設定,但 attr.output()attr.output_list()attr.license() 規則屬性除外,這些屬性一律無法設定。

default dict; default is {}
A default value to use if no value for this attribute is given when instantiating the rule.
doc string;或 None;預設為 None
可由文件生成工具擷取的屬性說明。
mandatory bool; 預設值為 False
如果為 true,則必須明確指定值 (即使有 default 也是如此)。

string_keyed_label_dict

Attribute attr.string_keyed_label_dict(allow_empty=True, *, configurable=unbound, default={}, doc=None, allow_files=None, allow_rules=None, providers=[], for_dependency_resolution=unbound, flags=[], mandatory=False, cfg=None, aspects=[])

為屬性建立結構定義,該屬性的值為字典,其中鍵是字串,值是標籤。這是依附元件屬性。

這項屬性包含不重複的 Label 值。如果提供字串來取代 Label,系統會使用標籤建構函式轉換字串。標籤路徑的相對部分 (包括可能已重新命名的存放區) 會根據例項化目標的套件解析。

在分析期間 (規則實作函式內),從 ctx.attr 擷取屬性值時,標籤會替換為對應的 Target。這樣您就能存取目前目標依附元件的供應商。

參數

參數 說明
allow_empty bool;預設為 True
如果屬性可以空白,則為 True。
configurable bool 或未繫結; 預設為 unbound
這個引數只能針對符號巨集的屬性指定。

如果 configurable 明確設為 False,符號巨集屬性就無法設定,也就是說,不能採用 select() 值。如果 configurable 未繫結或明確設為 True,則屬性可設定,且可採用 select() 值。

如果是規則或層面的屬性,則必須將 configurable 保持未繫結狀態。大多數 Starlark 規則屬性一律可設定,但 attr.output()attr.output_list()attr.license() 規則屬性除外,這些屬性一律無法設定。

default dictfunction; 預設值為 {}
如果例項化規則時未提供這個屬性的值,則要使用的預設值。請使用字串或 Label 函式指定預設值,例如 attr.string_keyed_label_dict(default = {"foo": "//a:b", "bar": "//a:c"})
doc string;或 None;預設為 None
可由文件生成工具擷取的屬性說明。
allow_files bool;或 sequencestring;或 None;預設值為 None
是否允許 File 目標。可以是 TrueFalse (預設值) 或允許的副檔名清單 (例如 [".cc", ".cpp"])。
allow_rules string序列;或 None; 預設值為 None
允許哪些規則目標 (類別名稱)。
這項政策已淘汰 (僅為相容性而保留),請改用供應商。
providers sequence; default is []
The providers that must be given by any dependency appearing in this attribute.

這個引數的格式為提供者清單的清單,也就是 provider() 傳回的 *Info 物件 (如果是舊版提供者,則為其字串名稱)。依附元件必須傳回至少一個內部清單中提及的「所有」供應器。為方便起見,這個引數也可以是單層供應商清單,在這種情況下,該清單會包裝在含有一個元素的外層清單中。規則的依附元件「不一定」要在 provides 參數中宣傳這些供應商,但建議這麼做。

for_dependency_resolution 預設值為 unbound
如果設定此值,屬性會提供給實體化工具。只有標示相同名稱旗標的規則,才能透過這類屬性參照。
flags 字串序列;預設為 []
已淘汰,將會移除。
mandatory bool; 預設值為 False
如果為 true,則必須明確指定值 (即使有 default 也是如此)。
cfg 預設值為屬性的 None
Configuration。可以是 "exec" (表示依附元件是為 execution platform 建構),也可以是 "target" (表示依附元件是為 target platform 建構)。舉例來說,在建構行動應用程式時,target platformAndroidiOS,而 execution platform 則是 LinuxmacOSWindows
aspects sequence of Aspects; default is []
Aspects that should be applied to the dependency or dependencies specified by this attribute.

string_list

Attribute attr.string_list(mandatory=False, allow_empty=True, *, configurable=unbound, default=[], doc=None)

為字串清單屬性建立結構定義。

參數

參數 說明
mandatory bool; 預設值為 False
如果為 true,則必須明確指定值 (即使有 default 也是如此)。
allow_empty bool;預設為 True
如果屬性可以空白,則為 True。
configurable bool 或未繫結; 預設為 unbound
這個引數只能針對符號巨集的屬性指定。

如果 configurable 明確設為 False,符號巨集屬性就無法設定,也就是說,不能採用 select() 值。如果 configurable 未繫結或明確設為 True,則屬性可設定,且可採用 select() 值。

如果是規則或層面的屬性,則必須將 configurable 保持未繫結狀態。大多數 Starlark 規則屬性一律可設定,但 attr.output()attr.output_list()attr.license() 規則屬性除外,這些屬性一律無法設定。

default 字串序列;或 NativeComputedDefault; 預設值為 []
如果例項化規則時未提供這個屬性的值,則使用預設值。
doc string;或 None;預設為 None
可由文件生成工具擷取的屬性說明。

string_list_dict

Attribute attr.string_list_dict(allow_empty=True, *, configurable=unbound, default={}, doc=None, mandatory=False)

為保存字典的屬性建立結構定義,其中鍵為字串,值為字串清單。

參數

參數 說明
allow_empty bool;預設為 True
如果屬性可以空白,則為 True。
configurable bool 或未繫結; 預設為 unbound
這個引數只能針對符號巨集的屬性指定。

如果 configurable 明確設為 False,符號巨集屬性就無法設定,也就是說,不能採用 select() 值。如果 configurable 未繫結或明確設為 True,則屬性可設定,且可採用 select() 值。

如果是規則或層面的屬性,則必須將 configurable 保持未繫結狀態。大多數 Starlark 規則屬性一律可設定,但 attr.output()attr.output_list()attr.license() 規則屬性除外,這些屬性一律無法設定。

default dict; default is {}
A default value to use if no value for this attribute is given when instantiating the rule.
doc string;或 None;預設為 None
可由文件生成工具擷取的屬性說明。
mandatory bool; 預設值為 False
如果為 true,則必須明確指定值 (即使有 default 也是如此)。