成员
- analysis_test_transition
- 方面
- configuration_field
- 依赖项
- exec_group
- module_extension
- provider
- repository_rule
- 规则
- 选择
- 子规则
- tag_class
- 可见性
analysis_test_transition
transition analysis_test_transition(settings)
创建要应用于分析测试规则依赖项的配置转换。此过渡效果只能应用于具有 analysis_test = True
的规则的属性。此类规则在功能方面受到限制(例如,其依赖关系树的大小有限),因此与使用 transition()
创建的转换相比,使用此函数创建的转换的潜在范围会受到限制。
此函数主要旨在促进分析测试框架核心库。如需了解最佳实践,请参阅相关文档(或实现)。
参数
参数 | 说明 |
---|---|
settings
|
required 包含相关信息的字典,配置设置应由此配置转换进行设置。键是 build 设置标签,值是它们的新转换后值。所有其他设置均保持不变。使用此方法声明分析测试通过的特定配置设置。 |
切面
Aspect aspect(implementation, attr_aspects=[], attrs={}, required_providers=[], required_aspect_providers=[], provides=[], requires=[], fragments=[], host_fragments=[], toolchains=[], incompatible_use_toolchain_transition=False, doc=None, *, apply_to_generating_rules=False, exec_compatible_with=[], exec_groups=None, subrules=[])创建新切面。此函数的结果必须存储在一个全局值中。如需了解详情,请参阅 Aspects 简介。
参数
参数 | 说明 |
---|---|
implementation
|
必需 实现此切面的 Starlark 函数,只有两个参数:Target(应用切面的目标)和 ctx(创建目标时所依据的规则上下文)。可通过 ctx.rule 字段获取目标的属性。对于每个切面应用于目标,在分析阶段都会评估此函数。 |
attr_aspects
|
由字符串组成的序列;默认值为 [] 属性名称列表。切面会沿具有这些名称的目标的属性中指定的依赖项传播。此处的常见值包括 deps 和 exports 。该列表还可以包含单个字符串 "*" ,以便在目标的所有依赖项中传播。 |
attrs
|
dict;默认值为 {} 一个用于声明切面所有属性的字典。它从属性名称映射到属性对象,例如 `attr.label` 或 `attr.string`(请参阅 attr 模块)。切面属性可作为 ctx 参数的字段用于实现函数。以 显式属性必须具有 |
required_providers
|
默认值为 [] 此属性允许切面将其传播限制到其规则通告其所需提供程序的目标。该值必须是包含单个提供商或提供商列表(但不能同时包含两者)的列表。例如, [[FooInfo], [BarInfo], [BazInfo, QuxInfo]] 是有效值,而 [FooInfo, BarInfo, [BazInfo, QuxInfo]] 无效。系统会自动将未嵌套的提供商列表转换为包含一个提供商列表的列表。也就是说, 若要使某个规则(如 |
required_aspect_providers
|
默认值为 [] 此属性允许此切面检查其他方面。该值必须是包含单个提供商或提供商列表(但不能同时包含两者)的列表。例如, [[FooInfo], [BarInfo], [BazInfo, QuxInfo]] 是有效值,而 [FooInfo, BarInfo, [BazInfo, QuxInfo]] 无效。系统会自动将未嵌套的提供商列表转换为包含一个提供商列表的列表。也就是说, 如需让另一个切面(例如 |
provides
|
默认值为 [] 实现函数必须返回的提供程序列表。 如果实现函数从其返回值中省略此处列出的任何类型的提供程序,则会引发错误。不过,实现函数可能会返回此处未列出的其他提供程序。 列表的每个元素都是 |
requires
|
Aspect 的序列;默认值为 [] 在此切面之前需要传播的切面列表。 |
fragments
|
string 的序列;默认值为 [] 目标配置中方面所需的配置 fragment 的名称列表。 |
host_fragments
|
string 的序列;默认值为 [] 主机配置中所需的配置 fragment 的名称列表。 |
toolchains
|
sequence;默认值为 [] 如果设置此参数,则表示此规则所需的工具链集。该列表可以包含任意组合的 String、Label 或 StarlarkToolchainTypeApi 对象。将通过检查当前平台找到工具链,并通过 ctx.toolchain 将其提供给规则实现。 |
incompatible_use_toolchain_transition
|
默认值为 False 已弃用,不再使用,应将其移除。 |
doc
|
string;或 None ;默认值为 None 可通过文档生成工具提取的切面的说明。 |
apply_to_generating_rules
|
默认值为 False 如果为 true,则当该切面应用于输出文件时,将改为应用于输出文件的生成规则。 例如,假设某个切面通过属性 `deps` 以传递方式传播,并且该属性已应用于目标 `alpha`。假设 `alpha` 具有 `deps = [':beta_output']`,其中 `beta_output` 是目标 `beta` 的已声明输出。假设 `beta` 有一个目标 `charlie`作为其 `deps`。如果 `deps` 的 `apply_to_generating`将仅传播至一个 False。如果 `apply_to_generating_rules` 将会传递至该值为 True, 默认值为 false。 |
exec_compatible_with
|
string 的序列;默认值为 [] 执行平台上的、适用于此方面的所有实例的约束列表。 |
exec_groups
|
dict;或 None ;默认值为 None 执行组名称(字符串)的 Dict,值为 exec_group 。如果设置,则允许切面在单个实例中的多个执行平台上运行操作。如需了解详情,请参阅执行组文档。
|
subrules
|
子规则序列;默认值为 [] 实验性功能:此方面使用的子规则列表。 |
configuration_field
LateBoundDefault configuration_field(fragment, name)引用 label 类型的属性的延迟绑定默认值。如果值需要先构建配置,然后才能确定该值,则该值属于“后期绑定”值。使用此作为值的任何属性都必须是私有属性。
用法示例:
定义规则属性:
'_foo': attr.label(default=configuration_field(fragment='java', name='toolchain'))
在规则实现中访问:
def _rule_impl(ctx): foo_info = ctx.attr._foo ...
参数
参数 | 说明 |
---|---|
fragment
|
必需 包含延迟绑定值的配置 fragment 的名称。 |
name
|
必需 要从配置 fragment 获取的值的名称。 |
废弃
depset depset(direct=None, order="default", *, transitive=None)创建一个 depset。
direct
形参是 depset 的直接元素列表,而 transitive
形参是一系列 depset,其元素会成为已创建的依赖项的间接元素。将偏移量转换为列表时,返回元素的顺序由 order
参数指定。如需了解详情,请参阅依赖项概览。
偏移的所有元素(直接和间接)都必须属于同一类型,如表达式 type(x)
所获取的类型。
由于基于哈希的集合用于在迭代期间消除重复项,因此 depset 的所有元素都应是可哈希的。不过,目前并未在所有构造函数中以一致的方式检查此不变性。使用 --incompatible_always_check_depset_elements 标志可启用一致性检查;这将是未来版本中的默认行为;请参阅问题 10313。
此外,元素当前必须是不可变的,但此限制将在将来放宽。
创建的依赖项的顺序应与其 transitive
依赖项的顺序兼容。"default"
订单与任何其他订单兼容,其他所有订单仅与其自身兼容。
参数
参数 | 说明 |
---|---|
direct
|
sequence;或 None ;默认值为 None 偏移量的直接元素列表。 |
order
|
默认值为 "default" 新依赖项的遍历策略。如需了解可能的值,请参阅此处。 |
transitive
|
depset 的 sequence;或 None ;默认值为 None 一系列 depset,其元素将成为该 depset 的间接元素。 |
exec_group
exec_group exec_group(toolchains=[], exec_compatible_with=[])创建一个执行组,该组可用于在规则实现期间为特定执行平台创建操作。
参数
参数 | 说明 |
---|---|
toolchains
|
sequence;默认值为 [] 此执行组所需的工具链集。该列表可以包含任意组合的 String、Label 或 StarlarkToolchainTypeApi 对象。 |
exec_compatible_with
|
string 的序列;默认值为 [] 执行平台上的约束条件列表。 |
module_extension
unknown module_extension(implementation, *, tag_classes={}, doc=None, environ=[], os_dependent=False, arch_dependent=False)创建新的模块扩展。将其存储在一个全局值中,以便将其导出并用在 MODULE.bazel 文件中。
参数
参数 | 说明 |
---|---|
implementation
|
required 实现此模块扩展的函数。必须接受一个参数 module_ctx 。在构建开始时调用一次该函数,以确定可用的代码库集。 |
tag_classes
|
默认值为 {} 一个字典,用于声明扩展程序使用的所有标记类。它从标记类的名称映射到 tag_class 对象。 |
doc
|
string;或 None ;默认值为 None 可通过文档生成工具提取的模块扩展的说明。 |
environ
|
string 的序列;默认值为 [] 提供此模块扩展所依赖的环境变量列表。如果该列表中的某个环境变量发生变化,系统会重新评估该扩展。 |
os_dependent
|
默认值为 False 指明此扩展程序是否依赖于操作系统 |
arch_dependent
|
默认值为 False 指示此扩展程序是否依赖于架构 |
provider
unknown provider(doc=None, *, fields=None, init=None)定义提供程序符号。提供程序可通过调用进行实例化,也可直接用作密钥以从目标中检索该提供程序的实例。示例:
MyInfo = provider() ... def _my_library_impl(ctx): ... my_info = MyInfo(x = 2, y = 3) # my_info.x == 2 # my_info.y == 3 ...
如需查看有关如何使用提供程序的全面指南,请参阅规则(提供程序)。
如果未指定 init
,则返回 Provider
Callable 值。
如果指定 init
,则会返回一个包含 2 个元素的元组:一个 Provider
Callable 值和一个原始构造函数 Callable 值。如需了解详情,请参阅 规则(自定义提供程序的自定义初始化)和下文对 init
参数的讨论。
参数
参数 | 说明 |
---|---|
doc
|
string;或 None ;默认值为 None 可通过文档生成工具提取的提供程序的说明。 |
fields
|
string;或 dict;或 None ;默认值为 None 如果指定,则限制允许的字段集。 可能的值包括:
|
init
|
Callable;或 None ;默认值为 None 可选回调函数,用于在实例化期间预处理和验证提供程序的字段值。如果指定 init ,provider() 会返回一个由以下 2 个元素组成的元组:常规提供程序符号和原始构造函数。下面提供了详细描述;请参阅规则(提供程序的自定义初始化),了解直观的讨论和用例。 让
init 回调,则对符号 P 本身的调用相当于对默认构造函数 c 的调用;换言之,P(*args, **kwargs) 会返回 c(*args, **kwargs) 。例如,MyInfo = provider() m = MyInfo(foo = 1)将直接使 m 成为具有 m.foo == 1 的 MyInfo 实例。但在指定
注意:以上步骤意味着,如果 通过这种方式, 指定 MyInfo, _new_myinfo = provider(init = ...) |
repository_rule
callable repository_rule(implementation, *, attrs=None, local=False, environ=[], configure=False, remotable=False, doc=None)创建新的代码库规则。将其存储在一个全局值中,以便可以从 WORKSPACE 文件加载和调用。
参数
参数 | 说明 |
---|---|
implementation
|
必需 实现此规则的函数。必须有一个参数 repository_ctx 。在加载阶段,系统会针对规则的每个实例调用该函数。 |
attrs
|
dict 或 None ;默认值为 None 字典,以声明规则的所有属性。它从属性名称映射到属性对象(请参阅 attr 模块)。以 _ 开头的属性是私有属性,可用于向文件添加对标签的隐式依赖项(代码库规则不能依赖于生成的工件)。属性 name 是隐式添加的,不得指定。
|
local
|
默认值为 False 表示此规则从本地系统提取所有内容,并且应在每次提取时重新评估。 |
environ
|
string 序列;默认值为 [] 。提供此代码库规则所依赖的环境变量列表。如果该列表中的环境变量发生变化,系统将重新获取代码库。 |
configure
|
默认值为 False 表示代码库出于配置目的检查系统 |
remotable
|
默认值为 False 实验性。此参数尚处于实验阶段,随时可能发生变化。请不要依赖它。可以通过设置 ---experimental_repo_remote_exec 与远程执行兼容 |
doc
|
string;或 None ;默认值为 None 可通过文档生成工具提取的代码库规则的说明。 |
规则
callable rule(implementation, *, test=unbound, attrs={}, outputs=None, executable=unbound, output_to_genfiles=False, fragments=[], host_fragments=[], _skylark_testable=False, toolchains=[], incompatible_use_toolchain_transition=False, doc=None, provides=[], exec_compatible_with=[], analysis_test=False, build_setting=None, cfg=None, exec_groups=None, initializer=None, parent=None, extendable=None, subrules=[])创建一个新规则,该规则可通过 BUILD 文件或宏调用来创建目标。
必须将规则分配给 .bzl 文件中的全局变量;全局变量的名称就是规则的名称。
测试规则的名称必须以 _test
结尾,所有其他规则不得使用此后缀。(此限制仅适用于规则,不适用于其目标)。
参数
参数 | 说明 |
---|---|
implementation
|
必需 实现此规则的 Starlark 函数必须只有一个参数:ctx。在分析阶段,系统会针对规则的每个实例调用该函数。它可以访问用户提供的属性。它必须创建操作来生成所有声明的输出。 |
test
|
bool;默认值为 unbound 此规则是否为测试规则,即是否可能是 blaze test 命令的主题。所有测试规则都会自动被视为可执行;没有必要(并且不建议)为测试规则明确设置 executable = True 。该值默认为 False 。如需了解详情,请参阅 “规则”页面。
|
attrs
|
dict;默认值为 {} 字典,以声明规则的所有属性。它从属性名称映射到属性对象(请参阅 attr 模块)。以 _ 开头的属性是私有属性,可用于添加对标签的隐式依赖项。属性 name 是隐式添加的,不得指定。visibility 、deprecation 、tags 、testonly 和 features 属性是隐式添加的,无法替换。大多数规则只需要少量属性。为了限制内存用量,规则函数对属性的大小施加了上限。 |
outputs
|
dict;或 None ;或 function;默认值为 None 已废弃。此参数已弃用,很快就会被移除。请不要依赖它。已使用 ---incompatible_no_rule_outputs_param 停用。使用此标记验证您的代码是否符合即将移除的代码。此参数已废弃。迁移规则以改用 OutputGroupInfo 或 attr.output 。用于定义预声明输出的架构。与 此参数的值是一个字典或可生成字典的回调函数。回调的工作方式与计算的依赖项属性类似:函数的参数名称将与规则的属性进行匹配,因此,如果您使用 字典中的每个条目都会创建一个预声明的输出,其中键是标识符,值是确定输出标签的字符串模板。在规则的实现函数中,标识符将成为用于访问
在实践中,最常见的替代占位符是 |
executable
|
bool;默认值为 unbound :此规则是否可执行,即是否可能是 blaze run 命令的主题。默认值为 False 。如需了解详情,请参阅 “规则”页面。
|
output_to_genfiles
|
默认值为 False 如果为 true,则将在 genfiles 目录而不是 bin 目录下生成文件。除非您需要它以便与现有规则兼容(例如,在为 C++ 生成头文件时),否则请勿设置此标志。 |
fragments
|
string 的序列;默认值为 [] 规则在目标配置中所需的配置 fragment 的名称列表。 |
host_fragments
|
由字符串组成的序列;默认值为 [] 规则在主机配置中所需的配置 fragment 的名称列表。 |
_skylark_testable
|
默认值为 False (实验性) 如果为 true,此规则将通过 Actions 提供程序向依赖它的规则公开其操作,以供检查。该提供程序也可以通过调用 ctx.created_actions() 提供给规则本身。此方法应仅用于测试 Starlark 规则的分析时行为。此标志日后可能会移除。 |
toolchains
|
sequence;默认值为 [] 如果设置此参数,则表示此规则所需的工具链集。该列表可以包含任意组合的 String、Label 或 StarlarkToolchainTypeApi 对象。将通过检查当前平台找到工具链,并通过 ctx.toolchain 将其提供给规则实现。 |
incompatible_use_toolchain_transition
|
默认值为 False 已弃用,不再使用,应将其移除。 |
doc
|
string;或 None ;默认值为 None 可通过文档生成工具提取的规则说明。 |
provides
|
默认值为 [] 实现函数必须返回的提供程序列表。 如果实现函数从其返回值中省略此处列出的任何类型的提供程序,则会引发错误。不过,实现函数可能会返回此处未列出的其他提供程序。 列表的每个元素都是 |
exec_compatible_with
|
由字符串组成的序列;默认值为 [] 对执行平台上、应用于此规则类型的所有目标的一系列限制条件。 |
analysis_test
|
默认值为 False 如果为 true,则将此规则视为分析测试。 注意:分析测试规则主要使用 Starlark 核心库中提供的基础架构来定义。如需相关指导,请参阅测试。 如果某条规则被定义为分析测试规则,则可以对该规则的属性使用通过 analysis_test_transition 定义的配置转换,但会选择接受一些限制:
|
build_setting
|
BuildSetting;或 None ;默认值为 None 如果设置,则描述此规则是哪种 build setting 。请参阅 config 模块。设置后,系统会自动向此规则添加一个名为“build_setting_default”的必需属性,其类型对应于此处传入的值。
|
cfg
|
默认值为 None 如果设置,则指向配置转换,规则将在分析之前应用于其自己的配置。 |
exec_groups
|
dict;或 None ;默认值为 None 执行组名称(字符串)的 Dict,值为 exec_group 。如果设置,则允许规则在单个目标内的多个执行平台上运行操作。如需了解详情,请参阅执行组文档。
|
initializer
|
默认值为 None 实验性功能:用于初始化规则属性的 Stalark 函数。 该函数会在加载时针对规则的每个实例调用。它会使用规则定义的公共属性的值(而不是使用通用属性,例如 它必须返回从属性名称到所需值的字典。未返回的属性不受影响。如果返回 系统会在属性定义中指定的默认值之前计算初始化程序。因此,如果初始化程序签名中的参数包含默认值,它会覆盖属性定义中的默认值(返回 同样,如果初始化程序签名中的某个参数没有默认值,则该参数将变为必需参数。在这种情况下,最好不要对属性定义进行默认设置/强制性设置。 最好对未处理的属性使用 对于扩展规则,系统会从子项到祖先实体调用所有初始化程序。仅向每个初始化程序传递其知道的公共属性。 |
parent
|
默认值为 None 实验性:扩展的 Stalark 规则。设置后,系统会合并公共属性以及所通告的提供商。该规则与父级中的 executable 和 test 匹配。合并了 fragments 、toolchains 、exec_compatible_with 和 exec_groups 的值。可能无法设置旧版或已弃用的参数。
|
extendable
|
bool;标签;或字符串;或 None ;默认值为 None 实验性功能:许可名单的一个标签,用于定义可以扩展此规则的规则。您还可以将其设置为 True/False,以始终允许/禁止扩展。Bazel 默认始终允许扩展。 |
subrules
|
子规则序列;默认值为 [] 实验性功能:此规则使用的子规则的列表。 |
select
unknown select(x, no_match_error='')
select()
是辅助函数,可以使规则属性可配置。如需了解详情,请参阅构建百科全书。
参数
参数 | 说明 |
---|---|
x
|
required 用于将配置条件映射到值的字典。每个键都是一个 Label 或一个标签字符串,用于标识 config_setting 或 constraint_value 实例。如需了解何时使用标签而非字符串,请参阅关于宏的文档。 |
no_match_error
|
默认值为 '' (可选)没有条件匹配时要报告的自定义错误。 |
子规则
Subrule subrule(implementation, attrs={}, toolchains=[], fragments=[], subrules=[])构造子规则的新实例。此函数的结果必须先存储在全局变量中,然后才能使用。
参数
参数 | 说明 |
---|---|
implementation
|
函数;必需 实现此子规则的 Starlark 函数 |
attrs
|
dict;默认值为 {} 用于声明子规则的所有(私有)属性的字典。 子规则只能具有标签类型的私有属性(即标签或标签列表)。Bazel 会自动将与这些标签对应的已解析值作为具名实参传递到子规则的实现函数中(因此实现函数需要接受与属性名称匹配的具名形参)。这些值的类型将是:
|
toolchains
|
sequence;默认值为 [] 如果设置此参数,则表示此子规则所需的工具链集。该列表可以包含任意组合的 String、Label 或 StarlarkToolchainTypeApi 对象。将通过检查当前平台找到工具链,并通过 ctx.toolchains 将其提供给子规则实现。 |
fragments
|
string 序列;默认值为 [] 目标配置中子规则所需的配置 fragment 的名称列表。 |
subrules
|
子规则的序列;默认值为 [] 此子规则所需的其他子规则的列表。 |
tag_class
tag_class tag_class(attrs={}, *, doc=None)创建一个新的 tag_class 对象,用于为标记类定义属性架构。标记类是模块扩展可以使用的数据对象。
参数
参数 | 说明 |
---|---|
attrs
|
默认值为 {} 一个字典,用于声明此标记类的所有属性。它从属性名称映射到属性对象(请参阅 attr 模块)。 |
doc
|
string;或 None ;默认值为 None 标记类的说明,可通过文档生成工具提取。 |
visibility
None
visibility(value)
设置当前正在初始化的 .bzl 模块的加载可见性。
模块的加载可见性决定其他 BUILD 和 .bzl 文件是否可以加载该模块。(这与底层 .bzl 源文件的目标可见性不同,后者用于控制文件是否显示为其他目标的依赖项)。加载可见性在软件包级别工作:如需加载模块,执行加载的文件必须位于已被授予该模块可见性的软件包中。无论模块可见性如何,模块始终可在其自己的软件包中加载。
对于每个 .bzl 文件,visibility()
只能调用一次,且只能在顶层调用,不能在函数内调用。首选样式是将此调用放在 load()
语句以及确定实参所需的任何简短逻辑的正下方。
如果 --check_bzl_visibility
标志设为 false,加载可见性违规行为将会发出警告,但构建不会失败。
参数
参数 | 说明 |
---|---|
value
|
required 软件包规范字符串列表,或单个软件包规范字符串。 软件包规范遵循与
不允许使用“@”语法;所有规范都是相对于当前模块的代码库进行解释的。 如果 请注意, |