Attr

回報問題 查看原始碼 夜間 7.2 7.1 7.0 6.5 6.4 這是用來定義規則或切面屬性結構定義的頂層模組。每個函式都會傳回一個物件,代表單一屬性的結構定義。這些物件會用做 rule()aspect()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; 預設值為 0
建立規則例項時,如果沒有指定此屬性的值,要使用的預設值。
doc string;或 None; 預設值為 None
可透過說明文件產生工具擷取的屬性說明。
mandatory bool; 預設值為 False
如果為 true,則必須明確指定該值 (即使其具有 default)。
values intsequence; 預設值為 []
屬性允許的值清單。如果指定任何其他值,就會發生錯誤。

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
如果屬性可以留空,則傳回「是」。
configurable bool;或無拘無束; 預設值為 unbound
只有符號巨集的屬性才能指定這個引數。

如果 configurable 已明確設為 False,符號型巨集屬性就無法設定,也就是說,該巨集屬性不得為 select() 值。如果 configurable 未繫結或明確設為 True,則該屬性可以設定,且可接受 select() 值。

如為規則或切面的屬性,configurable 必須不繫結。大部分的 Starlark 規則屬性隨時都可設定,但 attr.output()attr.output_list()attr.license() 規則屬性則一律無法設定。

default intsequence; 預設值為 []
建立規則例項時,如果沒有指定此屬性的值,要使用的預設值。
doc string;或 None; 預設值為 None
可透過說明文件產生工具擷取的屬性說明。

標籤

Attribute attr.label(configurable=unbound, default=None, doc=None, executable=False, allow_files=None, allow_single_file=None, mandatory=False, skip_validations=False, providers=[], 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 標籤;或 string;或 LateBoundDefault;或 NativeComputedDefault或函式;或 None; 預設值為 None
將規則例項化時,如果沒有為此屬性值指定預設值,請使用字串或 Label 函式指定預設值,例如 attr.label(default = "//a:b")
doc string;或 None; 預設值為 None
可透過說明文件產生工具擷取的屬性說明。
executable bool; 預設值為 False
如果依附元件需要執行,則為「是」。這表示標籤必須參照執行檔,或輸出執行檔的規則。使用 ctx.executable.<attribute_name> 存取標籤。
allow_files bool;字串序列;或 None; 預設值為 None
是否允許 File 目標。可以是 TrueFalse (預設),或是允許的副檔名清單 (例如 [".cc", ".cpp"])。
allow_single_file 預設值為 None
這與 allow_files 類似,差別在於標籤必須對應單一檔案。你可以透過「ctx.file.<attribute_name>」存取這個應用程式。
mandatory bool; 預設值為 False
如果為 true,則必須明確指定該值 (即使其具有 default)。
skip_validations bool; 預設值為 False
如為 true,則此屬性的遞移依附元件的驗證動作將不會執行。這只是暫時的緩解措施,日後我們會移除。
providers sequence; 預設值為 []
必須由此屬性中顯示的任何依附元件提供的提供者。

這個引數的格式是提供者清單,由 provider() 傳回的 *Info 物件 (如果是舊版供應器,則為其字串名稱)。依附元件必須傳回至少一份內部清單中提及的「所有」提供者。為了方便起見,這項引數也可能是單一的提供者清單,在這種情況下,會納入具有一個元素的外部清單。但依附元件規則「不一定」會在 provides 參數中宣傳這些供應商,但這是最佳做法。

allow_rules 字串序列;或 None; 預設值為 None
允許使用的規則目標 (類別名稱)。這項功能已淘汰 (僅保留相容性),請改用供應商。
cfg 預設值為 None
屬性的設定。可以是 "exec",表示專為 execution platform 建構的依附元件;或是 "target",表示為 target platform 建構的依附元件。常見差異範例是建構行動應用程式,其中 target platformAndroidiOS,而 execution platformLinuxmacOSWindows。如果 executable 為 True,就必須使用這個參數,以防在目標設定中意外建構主機工具。"target" 沒有語意效果,因此請勿在 executable 為 False 時設定此屬性,除非它真的有助於釐清您的意圖。
aspects 序列; 預設值為 []
應套用至這個屬性指定的依附元件或依附元件的切面。
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=[], flags=[], mandatory=False, cfg=None, aspects=[])

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

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

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

參數

參數 說明
allow_empty bool; 預設值為 True
如果屬性可以留空,則傳回「是」。
configurable bool;或無拘無束; 預設值為 unbound
只有符號巨集的屬性才能指定這個引數。

如果 configurable 已明確設為 False,符號型巨集屬性就無法設定,也就是說,該巨集屬性不得為 select() 值。如果 configurable 未繫結或明確設為 True,則該屬性可以設定,且可接受 select() 值。

如為規則或切面的屬性,configurable 必須不繫結。大部分的 Starlark 規則屬性隨時都可設定,但 attr.output()attr.output_list()attr.license() 規則屬性則一律無法設定。

default dict;或函式 預設值為 {}
將規則例項化時,如未指定此屬性的值,系統會使用字串或 Label 函式指定預設值,例如 attr.label_keyed_string_dict(default = {"//a:b": "value", "//a:c": "string"})
doc string;或 None; 預設值為 None
可透過說明文件產生工具擷取的屬性說明。
allow_files bool;字串序列;或 None; 預設值為 None
是否允許 File 目標。可以是 TrueFalse (預設),或是允許的副檔名清單 (例如 [".cc", ".cpp"])。
allow_rules 字串序列;或 None; 預設值為 None
允許使用的規則目標 (類別名稱)。這項功能已淘汰 (僅保留相容性),請改用供應商。
providers sequence; 預設值為 []
必須由此屬性中顯示的任何依附元件提供的提供者。

這個引數的格式是提供者清單,由 provider() 傳回的 *Info 物件 (如果是舊版供應器,則為其字串名稱)。依附元件必須傳回至少一份內部清單中提及的「所有」提供者。為了方便起見,這項引數也可能是單一的提供者清單,在這種情況下,會納入具有一個元素的外部清單。但依附元件規則「不一定」會在 provides 參數中宣傳這些供應商,但這是最佳做法。

flags 字串序列; 預設值為 []
已淘汰,將遭到移除。
mandatory bool; 預設值為 False
如果為 true,則必須明確指定該值 (即使其具有 default)。
cfg 預設值為 None
屬性的設定。可以是 "exec",表示專為 execution platform 建構的依附元件;或是 "target",表示為 target platform 建構的依附元件。常見差異範例是建構行動應用程式,其中 target platformAndroidiOS,而 execution platformLinuxmacOSWindows
aspects 序列; 預設值為 []
應套用至這個屬性指定的依附元件或依附元件的切面。

label_list

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

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

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

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

參數

參數 說明
allow_empty bool; 預設值為 True
如果屬性可以留空,則傳回「是」。
configurable bool;或無拘無束; 預設值為 unbound
只有符號巨集的屬性才能指定這個引數。

如果 configurable 已明確設為 False,符號型巨集屬性就無法設定,也就是說,該巨集屬性不得為 select() 值。如果 configurable 未繫結或明確設為 True,則該屬性可以設定,且可接受 select() 值。

如為規則或切面的屬性,configurable 必須不繫結。大部分的 Starlark 規則屬性隨時都可設定,但 attr.output()attr.output_list()attr.license() 規則屬性則一律無法設定。

default 「標籤」的序列;或函式; 預設值為 []
將規則例項化時,如果沒有指定此屬性的值,系統會使用字串或 Label 函式指定預設值,例如 attr.label_list(default = ["//a:b", "//a:c"])
doc string;或 None; 預設值為 None
可透過說明文件產生工具擷取的屬性說明。
allow_files bool;字串序列;或 None; 預設值為 None
是否允許 File 目標。可以是 TrueFalse (預設),或是允許的副檔名清單 (例如 [".cc", ".cpp"])。
allow_rules 字串序列;或 None; 預設值為 None
允許使用的規則目標 (類別名稱)。這項功能已淘汰 (僅保留相容性),請改用供應商。
providers sequence; 預設值為 []
必須由此屬性中顯示的任何依附元件提供的提供者。

這個引數的格式是提供者清單,由 provider() 傳回的 *Info 物件 (如果是舊版供應器,則為其字串名稱)。依附元件必須傳回至少一份內部清單中提及的「所有」提供者。為了方便起見,這項引數也可能是單一的提供者清單,在這種情況下,會納入具有一個元素的外部清單。但依附元件規則「不一定」會在 provides 參數中宣傳這些供應商,但這是最佳做法。

flags 字串序列; 預設值為 []
已淘汰,將遭到移除。
mandatory bool; 預設值為 False
如果為 true,則必須明確指定該值 (即使其具有 default)。
skip_validations bool; 預設值為 False
如為 true,則此屬性的遞移依附元件的驗證動作將不會執行。這只是暫時的緩解措施,日後我們會移除。
cfg 預設值為 None
屬性的設定。可以是 "exec",表示專為 execution platform 建構的依附元件;或是 "target",表示為 target platform 建構的依附元件。常見差異範例是建構行動應用程式,其中 target platformAndroidiOS,而 execution platformLinuxmacOSWindows
aspects 序列; 預設值為 []
應套用至這個屬性指定的依附元件或依附元件的切面。

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
如果屬性可以留空,則傳回「是」。
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
如果屬性可以留空,則傳回「是」。
configurable bool;或無拘無束; 預設值為 unbound
只有符號巨集的屬性才能指定這個引數。

如果 configurable 已明確設為 False,符號型巨集屬性就無法設定,也就是說,該巨集屬性不得為 select() 值。如果 configurable 未繫結或明確設為 True,則該屬性可以設定,且可接受 select() 值。

如為規則或切面的屬性,configurable 必須不繫結。大部分的 Starlark 規則屬性隨時都可設定,但 attr.output()attr.output_list()attr.license() 規則屬性則一律無法設定。

default dict; 預設值為 {}
建立規則例項時,如果沒有指定此屬性的值,要使用的預設值。
doc string;或 None; 預設值為 None
可透過說明文件產生工具擷取的屬性說明。
mandatory bool; 預設值為 False
如果為 true,則必須明確指定該值 (即使其具有 default)。

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
如果屬性可以留空,則傳回「是」。
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
如果屬性可以留空,則傳回「是」。
configurable bool;或無拘無束; 預設值為 unbound
只有符號巨集的屬性才能指定這個引數。

如果 configurable 已明確設為 False,符號型巨集屬性就無法設定,也就是說,該巨集屬性不得為 select() 值。如果 configurable 未繫結或明確設為 True,則該屬性可以設定,且可接受 select() 值。

如為規則或切面的屬性,configurable 必須不繫結。大部分的 Starlark 規則屬性隨時都可設定,但 attr.output()attr.output_list()attr.license() 規則屬性則一律無法設定。

default dict; 預設值為 {}
建立規則例項時,如果沒有指定此屬性的值,要使用的預設值。
doc string;或 None; 預設值為 None
可透過說明文件產生工具擷取的屬性說明。
mandatory bool; 預設值為 False
如果為 true,則必須明確指定該值 (即使其具有 default)。