属性

报告问题 查看源代码 每夜 build · 7.4 .

这是一个顶级模块,用于定义规则或切面的属性架构。每个函数都会返回一个对象,该对象表示单个属性的架构。这些对象用作 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;默认值为 0
实例化规则时,如果未为此属性提供任何值,则将使用默认值。
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 int序列; 默认为 []
如果在实例化规则时未为此属性指定值,则使用此默认值。
doc 字符串;或 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;或字符串;或 LateBoundDefault;或 NativeComputedDefault;或函数;或 None; 默认值为 None
在实例化规则时,如果未为此属性指定值,则使用的默认值。使用字符串或 Label 函数指定默认值,例如 attr.label(default = "//a:b")
materializer function; 默认值为 None
实验性。此参数目前处于实验阶段,随时可能发生变化。请勿依赖它。可以通过设置 --experimental_dormant_deps
在实验性的基础上启用该功能。如果设置了该参数,则该属性会具体化传递闭包中的休眠依赖项。此参数的值必须是函数,可以访问不属于依赖项或标记为可用于依赖项解析的规则的属性值。它必须返回一个休眠依赖项或一组休眠依赖项,具体取决于属性的类型
doc string;或 None;默认值为 None
可由文档生成工具提取的属性的说明。
executable bool; 默认为 False
如果依赖项必须是可执行的,则为 true。这意味着标签必须引用可执行文件,或者引用输出可执行文件的规则。使用 ctx.executable.<attribute_name> 访问标签。
allow_files 布尔值;或字符串序列;或 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 参数中通告这些提供程序,但这被视为最佳实践。

for_dependency_resolution 默认值为 unbound
如果设置此属性,则该属性可供 Material 化器使用。只有标有同名标志的规则才能通过此类属性引用。
allow_rules string 的序列;或 None;默认值为 None
允许哪个规则目标(类的名称)。此方法已废弃(仅出于兼容性目的而保留),请改用提供程序。
cfg 默认值为 None
属性的配置。它可以是 "exec",表示依赖项是为 execution platform 构建的,也可以是 "target",表示依赖项是为 target platform 构建的。这种差异的一个典型示例是构建移动应用时,其中 target platformAndroidiOS,而 execution platformLinuxmacOSWindows。如果 executable 为 True,则必须使用此参数,以防止在目标配置中意外构建宿主工具。"target" 没有语义影响,因此,除非它确实有助于阐明您的意图,否则请勿在 executable 为 False 时设置它。
aspects Aspectsequence;默认值为 []
应应用于此属性指定的依赖项的切面。
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 字典;或函数; 默认值为 {}
如果在实例化规则时未为此属性指定值,则使用此默认值。使用字符串或 Label 函数指定默认值,例如 attr.label_keyed_string_dict(default = {"//a:b": "value", "//a:c": "string"})
doc 字符串;或 None; 默认为 None
可由文档生成工具提取的属性说明。
allow_files bool;或 string 的序列;或 None;默认值为 None
是否允许 File 目标。可以是 TrueFalse(默认值)或允许的文件扩展名列表(例如 [".cc", ".cpp"])。
allow_rules string 的序列;或 None;默认值为 None
允许哪个规则目标(类的名称)。此方法已废弃(仅出于兼容性目的而保留),请改用提供程序。
providers sequence; 默认为 []
此属性中显示的任何依赖项都必须提供的提供程序。

此参数的格式为提供商列表,即 provider() 返回的 *Info 对象(如果是旧版提供程序,则是其字符串名称)。依赖项必须返回至少一个内部列表中提及的所有提供程序。为方便起见,此参数也可以是单级提供程序列表,在这种情况下,它会封装在包含一个元素的外部列表中。依赖项的规则不必在其 provides 参数中通告这些提供程序,但这被视为最佳实践。

for_dependency_resolution 默认值为 unbound
如果设置了此属性,则该属性可用于具体化程序。只有标记为具有相同标志的规则才能通过此类属性进行引用。
flags stringsequence;默认值为 []
已弃用,将被移除。
mandatory bool; 默认为 False
如果为 true,则必须明确指定值(即使它具有 default)。
cfg 默认值为 None
属性的配置。它可以是 "exec",表示依赖项是为 execution platform 构建的,也可以是 "target",表示依赖项是为 target platform 构建的。一个典型的区别示例是,在构建移动应用时,target platformAndroidiOS,而 execution platformLinuxmacOSWindows
aspects Aspect序列;默认为 []
应应用于此属性指定的依赖项的 Aspect。

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 属性将为 Target列表类型。

此属性包含唯一的 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 函数指定默认值,例如 attr.label_list(default = ["//a:b", "//a:c"])
materializer function; 默认值为 None
实验性。此参数目前处于实验阶段,随时可能发生变化。请勿依赖此功能。可以通过设置 --experimental_dormant_deps
在实验性的基础上启用该功能。如果设置了该参数,则该属性会具体化传递闭包中的休眠依赖项。此参数的值必须是一个函数,该函数可访问规则的属性值,这些属性值不是依赖项,或者已标记为可用于依赖项解析。它必须返回一个休眠依赖项或一组休眠依赖项,具体取决于属性的类型
doc 字符串;或 None; 默认为 None
可由文档生成工具提取的属性说明。
allow_files bool;或 string 的序列;或 None;默认值为 None
是否允许 File 目标。可以是 TrueFalse(默认值)或允许的文件扩展名列表(例如 [".cc", ".cpp"])。
allow_rules 字符串序列;或 None; 默认为 None
允许的规则目标(类的名称)。此属性已废弃(仅出于兼容性考虑),请改用提供程序。
providers sequence; 默认为 []
此属性中显示的任何依赖项都必须提供的提供程序。

此参数的格式为提供商列表,即 provider() 返回的 *Info 对象(如果是旧版提供程序,则是其字符串名称)。依赖项必须返回至少一个内部列表中提及的所有提供程序。为方便起见,此参数也可以是单级提供程序列表,在这种情况下,它会封装在包含一个元素的外部列表中。依赖项的规则不必在其 provides 参数中通告这些提供程序,但这被视为最佳实践。

for_dependency_resolution 默认值为 unbound
如果设置了此属性,则该属性可用于具体化程序。只有标记为具有相同标志的规则才能通过此类属性进行引用。
flags 字符串序列;默认为 []
已废弃,将被移除。
mandatory bool; 默认为 False
如果为 true,则必须明确指定值(即使它具有 default)。
skip_validations bool; 默认为 False
如果为 true,则不会运行此属性中传递依赖项的验证操作。这只是一项临时缓解措施,日后将被移除。
cfg 默认值为 None
属性的配置。它可以是 "exec"(表示依赖项是针对 execution platform 构建的),也可以是 "target"(表示依赖项是针对 target platform 构建的)。一个典型的区别示例是,在构建移动应用时,target platformAndroidiOS,而 execution platformLinuxmacOSWindows
aspects Aspect序列;默认为 []
应应用于此属性指定的依赖项的 Aspect。

output

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

为输出(标签)属性创建架构。

此属性包含唯一的 Label 值。如果提供字符串来代替 Label,则将使用标签构造函数对其进行转换。标签路径的相对部分,包括(可能重命名的)存储库,将根据实例化目标的软件包进行解析。

在分析时,可以使用 ctx.outputs 检索相应的 File

参数

参数 说明
doc 字符串;或 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 字符串;或 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 字符串;或 NativeComputedDefault; 默认为 ''
如果在实例化规则时未为此属性指定值,则使用此默认值。
doc 字符串;或 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 字典; 默认值为 {}
如果在实例化规则时未为此属性指定值,则使用此默认值。
doc 字符串;或 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 字典;或函数; 默认值为 {}
如果在实例化规则时未为此属性指定值,则使用此默认值。使用字符串或 Label 函数指定默认值,例如 attr.string_keyed_label_dict(default = {"foo": "//a:b", "bar": "//a:c"})
doc 字符串;或 None; 默认为 None
可由文档生成工具提取的属性说明。
allow_files 布尔值;或字符串序列;或 None; 默认为 None
是否允许 File 目标。可以是 TrueFalse(默认)或允许的文件扩展名列表(例如 [".cc", ".cpp"])。
allow_rules 字符串序列;或 None; 默认为 None
允许的规则目标(类的名称)。此属性已废弃(仅出于兼容性考虑),请改用提供程序。
providers sequence;默认值为 []
此属性中出现的依赖项必须由其提供的提供程序。

此参数的格式为提供程序列表的列表,即 provider() 返回的 *Info 对象(对于旧版提供程序,则为其字符串名称)。依赖项必须返回至少一个内部列表中提及的所有提供程序。为方便起见,此参数也可以是单级提供程序列表,在这种情况下,它会封装在包含一个元素的外部列表中。依赖项的规则不必在其 provides 参数中通告这些提供程序,但这被视为最佳实践。

for_dependency_resolution 默认值为 unbound
如果设置了此属性,则该属性可用于具体化程序。只有标记为具有相同标志的规则才能通过此类属性进行引用。
flags 字符串序列;默认为 []
已废弃,将被移除。
mandatory bool; 默认为 False
如果为 true,则必须明确指定值(即使它具有 default)。
cfg 默认值为 None
属性的配置。它可以是 "exec",表示依赖项是为 execution platform 构建的,也可以是 "target",表示依赖项是为 target platform 构建的。一个典型的区别示例是,在构建移动应用时,target platformAndroidiOS,而 execution platformLinuxmacOSWindows
aspects Aspectsequence;默认值为 []
应应用于此属性指定的依赖项的切面。

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 字符串;或 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 字典; 默认值为 {}
如果在实例化规则时未为此属性指定值,则使用此默认值。
doc 字符串;或 None; 默认为 None
可由文档生成工具提取的属性说明。
mandatory bool; 默认为 False
如果为 true,则必须明确指定值(即使它具有 default)。