属性

报告问题 查看源代码 敬上 每晚 · 7.3。 · 7.2。 · 7.1。 · 7.0 · 6.5

这是一个顶级模块,用于定义规则或切面的属性架构。每个函数都会返回一个对象,该对象表示单个属性的架构。这些对象会用作 rule()aspect()attrs 字典参数的值。

请参阅“规则”页面,详细了解如何定义使用属性。

成员

bool

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

为布尔值属性创建架构。对应的 ctx.attr 属性的类型为 bool

参数

参数 说明
default 默认值为 False
在实例化规则时,若未指定此属性的任何值,将使用默认值。
doc string;或 None; 默认值为 None
可通过文档生成工具提取的属性的说明。
mandatory 默认值为 False
如果值为 true,则必须明确指定值(即使该值为 default)。

int

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

为整数属性创建架构。值必须在 32 位带符号范围内。对应的 ctx.attr 属性的类型为 int

参数

参数 说明
default 默认值为 0
在实例化规则时,若未指定此属性的任何值,将使用默认值。
doc string;或 None; 默认值为 None
可通过文档生成工具提取的属性的说明。
mandatory 默认值为 False
如果值为 true,则必须明确指定值(即使该值为 default)。
values int 的序列; 默认值为 []
允许的属性列表。如果指定了任何其他值,则会引发错误。

int_list

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

为整数列表属性创建架构。每个元素都必须在 32 位带符号范围内。

参数

参数 说明
mandatory 默认值为 False
如果值为 true,则必须明确指定值(即使该值为 default)。
allow_empty 默认值为 True
如果属性可以为空,则返回 true。
default int 的序列; 默认值为 []
在实例化规则时,若未指定此属性的任何值,将使用默认值。
doc string;或 None; 默认值为 None
可通过文档生成工具提取的属性的说明。

标签

Attribute attr.label(default=None, doc=None, executable=False, allow_files=None, allow_single_file=None, mandatory=False, providers=[], allow_rules=None, cfg=None, aspects=[])

为标签属性创建架构。这是依赖项属性。

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

在分析时(在规则的实现函数内),从 ctx.attr 检索属性值时,标签会替换为相应的 Target。这样,您就可以访问当前目标的依赖项的提供程序。

除了普通的源文件之外,这种属性通常还用于指代工具,例如编译器。这些工具被视为依赖项,就像源文件一样。为避免每次在其 BUILD 文件中使用规则时都要求用户指定工具的标签,您可以将规范工具的标签硬编码为此属性的 default 值。如果您还想阻止用户覆盖此默认值,则可以为属性指定一个以下划线开头的名称,从而将其设为不公开。如需了解详情,请参阅规则页面。

参数

参数 说明
default 标签;或 string;或 LateBoundDefault;或 NativeComputedDefault;或函数;或 None; 默认值为 None
在实例化规则时,没有为此属性提供任何值时使用的默认值。请使用字符串或 Label 函数指定默认值,例如 attr.label(default = "//a:b")
doc string;或 None; 默认值为 None
可通过文档生成工具提取的属性的说明。
executable 默认值为 False
如果依赖项必须可执行,则为 true。也就是说,标签必须引用可执行文件或者输出可执行文件的规则。使用 ctx.executable.<attribute_name> 访问标签。
allow_files bool;或“string”的序列;None; 默认值为 None
是否允许 File 目标。可以是 TrueFalse(默认)或允许的文件扩展名列表(例如 [".cc", ".cpp"])。
allow_single_file 默认值为 None
这与 allow_files 类似,不同之处在于标签必须与单个 File 相对应。通过 ctx.file.<attribute_name> 访问。
mandatory 默认值为 False
如果值为 true,则必须明确指定值(即使该值为 default)。
providers 默认值为 []
必须由此属性中显示的任何依赖项提供的提供程序。

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

allow_rules string 的序列;None; 默认值为 None
允许哪些规则目标(类名称)。此 API 已弃用(仅出于兼容性要求而保留),请改用提供程序。
cfg 默认值为 None
属性的配置。它可以是 "exec"(表示依赖项是针对 execution platform 构建的),也可以是 "target"(表示依赖项是针对 target platform 构建的)。这种差异的一个典型示例是构建移动应用时,其中 target platformAndroidiOS,而 execution platformLinuxmacOSWindows。如果 executable 为 True,则必须使用此参数,以防止在目标配置中意外构建主机工具。"target" 没有语义影响,因此当 executable 为 False 时,除非它确实有助于阐明您的意图,否则请不要设置它。
aspects Aspectsequence; 默认值为 []
应应用于此属性指定的依赖项的切面。

label_keyed_string_dict

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

为存储字典的属性创建架构,其中键是标签,值是字符串。这是依赖项属性。

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

在分析时(在规则的实现函数内),从 ctx.attr 检索属性值时,标签会替换为相应的 Target。这样,您就可以访问当前目标的依赖项的提供程序。

参数

参数 说明
allow_empty 默认值为 True
如果属性可以为空,则返回 true。
default dict;或函数; 默认值为 {}
在实例化规则时,没有为此属性提供任何值时使用的默认值。请使用字符串或 Label 函数指定默认值,例如 attr.label_keyed_string_dict(default = {"//a:b": "value", "//a:c": "string"})
doc string;或 None; 默认值为 None
可通过文档生成工具提取的属性的说明。
allow_files bool;或“string”的序列;None; 默认值为 None
是否允许 File 目标。可以是 TrueFalse(默认)或允许的文件扩展名列表(例如 [".cc", ".cpp"])。
allow_rules string 的序列;None; 默认值为 None
允许哪些规则目标(类名称)。此 API 已弃用(仅出于兼容性要求而保留),请改用提供程序。
providers 默认值为 []
必须由此属性中显示的任何依赖项提供的提供程序。

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

flags string 的序列; 默认值为 []
已弃用,将被移除。
mandatory 默认值为 False
如果值为 true,则必须明确指定值(即使该值为 default)。
cfg 默认值为 None
属性的配置。它可以是 "exec"(表示依赖项是针对 execution platform 构建的),也可以是 "target"(表示依赖项是针对 target platform 构建的)。这种差异的一个典型示例是构建移动应用时,其中 target platformAndroidiOS,而 execution platformLinuxmacOSWindows
aspects Aspectsequence; 默认值为 []
应应用于此属性指定的依赖项的切面。

label_list

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

为标签列表属性创建架构。这是依赖项属性。对应的 ctx.attr 属性的类型为 Target 列表

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

在分析时(在规则的实现函数内),从 ctx.attr 检索属性值时,标签会替换为相应的 Target。这样,您就可以访问当前目标的依赖项的提供程序。

参数

参数 说明
allow_empty 默认值为 True
如果属性可以为空,则返回 true。
default Labelsequence;或函数; 默认值为 []
在实例化规则时,没有为此属性提供任何值时使用的默认值。请使用字符串或 Label 函数指定默认值,例如 attr.label_list(default = ["//a:b", "//a:c"])
doc string;或 None; 默认值为 None
可通过文档生成工具提取的属性的说明。
allow_files bool;或“string”的序列;None; 默认值为 None
是否允许 File 目标。可以是 TrueFalse(默认)或允许的文件扩展名列表(例如 [".cc", ".cpp"])。
allow_rules string 的序列;None; 默认值为 None
允许哪些规则目标(类名称)。此 API 已弃用(仅出于兼容性要求而保留),请改用提供程序。
providers 默认值为 []
必须由此属性中显示的任何依赖项提供的提供程序。

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

flags string 的序列; 默认值为 []
已弃用,将被移除。
mandatory 默认值为 False
如果值为 true,则必须明确指定值(即使该值为 default)。
cfg 默认值为 None
属性的配置。它可以是 "exec"(表示依赖项是针对 execution platform 构建的),也可以是 "target"(表示依赖项是针对 target platform 构建的)。这种差异的一个典型示例是构建移动应用时,其中 target platformAndroidiOS,而 execution platformLinuxmacOSWindows
aspects Aspectsequence; 默认值为 []
应应用于此属性指定的依赖项的切面。

output

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

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

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

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

参数

参数 说明
doc string;或 None; 默认值为 None
可通过文档生成工具提取的属性的说明。
mandatory 默认值为 False
如果值为 true,则必须明确指定值(即使该值为 default)。

output_list

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

为输出列表属性创建架构。

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

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

参数

参数 说明
allow_empty 默认值为 True
如果属性可以为空,则返回 true。
doc string;或 None; 默认值为 None
可通过文档生成工具提取的属性的说明。
mandatory 默认值为 False
如果值为 true,则必须明确指定值(即使该值为 default)。

字符串

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

string 属性创建架构。

参数

参数 说明
default string;或 NativeComputedDefault; 默认值为 ''
在实例化规则时,若未指定此属性的任何值,将使用默认值。
doc string;或 None; 默认值为 None
可通过文档生成工具提取的属性的说明。
mandatory 默认值为 False
如果值为 true,则必须明确指定值(即使该值为 default)。
values string 的序列; 默认值为 []
允许的属性列表。如果指定了任何其他值,则会引发错误。

string_dict

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

为存放字典的属性创建架构,其中键和值为字符串。

参数

参数 说明
allow_empty 默认值为 True
如果属性可以为空,则返回 true。
default 默认值为 {}
在实例化规则时,若未指定此属性的任何值,将使用默认值。
doc string;或 None; 默认值为 None
可通过文档生成工具提取的属性的说明。
mandatory 默认值为 False
如果值为 true,则必须明确指定值(即使该值为 default)。

string_list

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

为字符串列表属性创建架构。

参数

参数 说明
mandatory 默认值为 False
如果值为 true,则必须明确指定值(即使该值为 default)。
allow_empty 默认值为 True
如果属性可以为空,则返回 true。
default string 的序列;或 NativeComputedDefault; 默认值为 []
在实例化规则时,若未指定此属性的任何值,将使用默认值。
doc string;或 None; 默认值为 None
可通过文档生成工具提取的属性的说明。

string_list_dict

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

为存放字典的属性创建架构,其中键是字符串,值是字符串列表。

参数

参数 说明
allow_empty 默认值为 True
如果属性可以为空,则返回 true。
default 默认值为 {}
在实例化规则时,若未指定此属性的任何值,将使用默认值。
doc string;或 None; 默认值为 None
可通过文档生成工具提取的属性的说明。
mandatory 默认值为 False
如果值为 true,则必须明确指定值(即使该值为 default)。