成员
- analysis_test_transition
- 方面
- configuration_field
- depset
- exec_group
- module_extension
- 提供商
- repository_rule
- 规则
- 选择
- subrule
- tag_class
- 可见性
analysis_test_transition
transition analysis_test_transition(settings)
 创建要应用于分析测试规则依赖项的配置过渡。此过渡效果只能应用于具有 analysis_test = True 的规则的属性。此类规则的功能受到限制(例如,其依赖树的大小受到限制),因此与使用 transition() 创建的过渡相比,使用此函数创建的过渡的潜在范围受到限制。
此函数主要用于帮助使用 Analysis Test Framework 核心库。如需了解最佳实践,请参阅其文档(或其实现)。
参数
| 参数 | 说明 | 
|---|---|
| settings | 必需 一个字典,包含有关应通过此配置转换设置的配置设置的信息。键是 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=[])
参数
| 参数 | 说明 | 
|---|---|
| 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 | 方面的序列;默认值为 []在传播此方面之前需要传播的方面列表。 | 
| fragments | 字符串的序列;默认值为 []方面在目标配置中所需的配置 fragment 的名称列表。 | 
| host_fragments | 字符串的序列;默认值为 []主机配置中方面所需的配置 fragment 的名称列表。 | 
| toolchains | 序列;
                                     默认值为 []如果设置,则表示此规则所需的工具链集。该列表可以包含 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”之一。如果该方面的“apply_to_generating_rules”为 True,则该方面将通过“alpha”“beta”和“charlie”传播。如果为 False,则该方面将仅传播到“alpha”。 默认值为 false。 | 
| exec_compatible_with | 字符串的序列;默认值为 []适用于此方面所有实例的执行平台限制条件列表。 | 
| exec_groups | dict;或 None;
                                     默认值为None执行组名称(字符串)到 exec_groups 的字典。如果设置,则允许方面在单个实例中的多个执行平台上运行操作。如需了解详情,请参阅执行组文档。 | 
| subrules | 子规则的序列;默认值为 []实验性:此方面使用的子规则列表。 | 
configuration_field
LateBoundDefault configuration_field(fragment, name)
用法示例:
定义规则属性:
'_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 depset(direct=None, order="default", *, transitive=None)
direct 参数是 depset 的直接元素列表,而 transitive 参数是 depset 的列表,这些 depset 的元素会成为所创建 depset 的间接元素。将 depset 转换为列表时,返回元素的顺序由 order 参数指定。如需了解详情,请参阅 Depset 概览。
deps 的所有元素(直接和间接)必须具有相同的类型,如表达式 type(x) 所获得的那样。
由于在迭代期间会使用基于哈希的集合来消除重复项,因此 depset 的所有元素都应该是可哈希的。不过,目前并非所有构造函数都会始终如一地检查此不变量。使用 --incompatible_always_check_depset_elements 标志可启用一致性检查;这将是未来版本中的默认行为;请参阅问题 10313。
此外,元素目前必须是不可变的,但此限制将在未来放宽。
 所创建 depset 的顺序应与相应 transitive depset 的顺序兼容。"default" 顺序与任何其他顺序兼容,所有其他顺序仅与自身兼容。
          
      
参数
| 参数 | 说明 | 
|---|---|
| direct | 序列;或 None;
                                     默认值为Nonedeps 的直接元素列表。 | 
| order | 默认值为 "default"新 depset 的遍历策略。如需了解可能的值,请点击此处。 | 
| transitive | depset 的序列;或 None;
                                     默认值为None一个 depset 列表,其元素将成为 depset 的间接元素。 | 
exec_group
exec_group exec_group(toolchains=[], exec_compatible_with=[])
参数
| 参数 | 说明 | 
|---|---|
| toolchains | 序列;
                                     默认值为 []此执行组所需的工具链集。该列表可以包含 String、Label 或 StarlarkToolchainTypeApi 对象,并且可以包含任意组合。 | 
| exec_compatible_with | 字符串的序列;
                                     默认值为 []执行平台上的限制条件列表。 | 
module_extension
unknown module_extension(implementation, *, tag_classes={}, doc=None, environ=[], os_dependent=False, arch_dependent=False)use_extension 将其导出并在 MODULE.bazel 文件中使用。
          
      参数
| 参数 | 说明 | 
|---|---|
| implementation | 必需 实现此模块扩展的函数。必须接受单个参数 module_ctx。在 build 开始时调用一次,以确定可用的 repo 集。 | 
| tag_classes | 默认值为 {}用于声明扩展程序使用的所有标记类的字典。它从标记类的名称映射到 tag_class对象。 | 
| doc | 字符串;或 None;
                                     默认值为None可由文档生成工具提取的模块扩展的说明。 | 
| environ | 字符串的序列;默认值为 []提供此模块扩展程序所依赖的环境变量的列表。如果该列表中的某个环境变量发生变化,系统将重新评估扩展程序。 | 
| 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 可调用值。
如果指定了 init,则返回一个包含 2 个元素的元组:一个 Provider 可调用值和一个原始构造函数可调用值。如需了解详情,请参阅 规则(自定义提供程序的自定义初始化)以及下文中对 init 参数的讨论。
          
      
参数
| 参数 | 说明 | 
|---|---|
| doc | string;或 None;
                                     默认值为None提供程序的说明,可由文档生成工具提取。 | 
| fields | string 的序列;或 dict;或 None;
                                     默认值为None如果指定,则限制允许的字段集。 可能的值包括: 
 | 
| init | 可调用对象;或 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)
module extension 实现函数加载和调用,或供 use_repo_rule 使用。
          
      参数
| 参数 | 说明 | 
|---|---|
| implementation | 必需 实现此规则的函数。必须具有单个形参 repository_ctx。在加载阶段,系统会针对规则的每个实例调用该函数。 | 
| attrs | dict;或 None;
                                     默认值为None用于声明规则的所有属性的字典。它从属性名称映射到属性对象(请参阅 attr 模块)。以 _开头的属性是私有属性,可用于向文件添加对标签的隐式依赖项(存储库规则不能依赖于生成的制品)。系统会隐式添加属性name,因此不得指定该属性。 | 
| local | 默认值为 False表示此规则从本地系统提取所有内容,并且应在每次提取时重新评估。 | 
| environ | 字符串的序列;
                                     默认值为 []已弃用。此参数已被弃用。改用 repository_ctx.getenv。提供此代码库规则所依赖的环境变量列表。如果该列表中的某个环境变量发生变化,系统将重新提取相应代码库。 | 
| configure | 默认值为 False表示代码库会检查系统以进行配置 | 
| remotable | 默认值为 False实验性。此参数目前处于实验阶段,随时可能发生变化。请勿依赖此功能。可通过设置 ---experimental_repo_remote_exec启用(实验性)与远程执行兼容 | 
| doc | 字符串;或 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=[])规则必须分配给 .bzl 文件中的全局变量;全局变量的名称就是规则的名称。
测试规则的名称必须以 _test 结尾,而所有其他规则的名称都不得包含此后缀。(此限制仅适用于规则,而不适用于规则的目标。)
          
      
参数
| 参数 | 说明 | 
|---|---|
| implementation | 必需 实现相应规则的 Starlark 函数,必须只有一个参数:ctx。在分析阶段,系统会针对规则的每个实例调用该函数。它可以访问用户提供的属性。它必须创建操作来生成所有声明的输出。 | 
| test | 布尔值;
                                     默认值为 unbound此规则是否为测试规则,即是否可能成为 blaze test命令的主题。所有测试规则都会自动被视为可执行;无需(也不建议)为测试规则明确设置executable = True。该值默认为False。如需了解详情,请参阅 “规则”页面。 | 
| attrs | dict;
                                     默认值为 {}用于声明规则的所有属性的字典。它从属性名称映射到属性对象(请参阅 attr 模块)。以 _开头的属性是私有属性,可用于添加对标签的隐式依赖项。系统会隐式添加属性name,因此不得指定该属性。系统会隐式添加属性visibility、deprecation、tags、testonly和features,并且这些属性无法被替换。大多数规则只需要少量属性。为了限制内存使用量,规则函数对 attrs 的大小施加了上限。 | 
| outputs | dict;或 None;或 函数;
                                     默认值为None已弃用。此参数已被弃用,很快就会被移除。请勿依赖此功能。它已通过 ---incompatible_no_rule_outputs_param停用。使用此标志可验证您的代码是否与即将进行的移除操作兼容。此参数已被弃用。请迁移规则,改用 OutputGroupInfo或attr.output。用于定义预先声明的输出的架构。与  此实参的值可以是字典,也可以是生成字典的回调函数。回调的工作方式与计算出的依赖属性类似:系统会将函数的形参名称与规则的属性进行匹配,因此,举例来说,如果您传递定义为  字典中的每个条目都会创建一个预先声明的输出,其中键是标识符,值是用于确定输出标签的字符串模板。在规则的实现函数中,标识符会成为用于在  
 在实践中,最常见的替换占位符是  | 
| executable | bool;
                                     默认值为 unbound相应规则是否被视为可执行,即是否可以成为 blaze run命令的主题。默认值为False。如需了解详情,请参阅 “规则”页面。 | 
| output_to_genfiles | 默认值为 False如果为 true,则文件将生成在 genfiles 目录中,而不是 bin 目录中。除非您需要此标志来与现有规则兼容(例如,在为 C++ 生成头文件时),否则请勿设置此标志。 | 
| fragments | 字符串的序列;默认值为 []目标配置中规则所需的配置 fragment 的名称列表。 | 
| host_fragments | 字符串的序列;默认值为 []规则在主机配置中所需的配置 fragment 的名称列表。 | 
| _skylark_testable | 默认值为 False(实验性) 如果为 true,此规则将通过 Actions提供程序公开其操作,以供依赖于它的规则进行检查。通过调用 ctx.created_actions(),规则本身也可以使用提供程序。这仅应用于测试 Starlark 规则的分析时行为。此标志可能会在未来版本中移除。 | 
| toolchains | 序列;
                                     默认值为 []如果设置,则表示此规则所需的工具链集。该列表可以包含 String、Label 或 StarlarkToolchainTypeApi 对象,并且可以包含任意组合。通过检查当前平台来查找工具链,并通过 ctx.toolchain将其提供给规则实现。 | 
| incompatible_use_toolchain_transition | 默认值为 False已弃用,此属性已不再使用,应移除。 | 
| doc | 字符串;或 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执行组名称(字符串)到 exec_groups 的字典。如果设置,则允许规则在单个目标中的多个执行平台上运行操作。如需了解详情,请参阅执行组文档。 | 
| initializer | 默认值为 None实验性:用于初始化规则属性的 Stalark 函数。 系统会在加载时针对规则的每个实例调用该函数。系统会使用  它必须返回一个从属性名称到所需值的字典。未返回的属性不受影响。如果返回值是  在评估属性定义中指定的默认值之前,系统会先评估初始化程序。因此,如果初始化程序的签名中的某个形参包含默认值,则该默认值会覆盖属性定义中的默认值(除非返回  同样,如果初始化程序的签名中的某个形参没有默认值,则该形参将变为必需形参。在这种情况下,最好在属性定义中省略默认/强制性设置。 对于未处理的属性,最好使用  对于扩展规则,所有初始化程序都会按从子级到祖先的顺序调用。每个初始化程序仅传递其已知的公共属性。 | 
| parent | 默认值为 None实验性:要扩展的 Stalark 规则。设置后,系统会合并公开属性以及通告的提供程序。该规则与父级中的 executable和test相匹配。合并fragments、toolchains、exec_compatible_with和exec_groups的值。可能无法设置旧版或已弃用的参数。在应用此规则的传入配置后,应用父级的传入配置过渡cfg。 | 
| extendable | 布尔值;或标签;或字符串;或 None;
                                     默认值为None实验性:一个许可名单标签,用于定义哪些规则可以扩展此规则。也可以将其设置为 True/False,以始终允许/禁止扩展。Bazel 默认始终允许扩展程序。 | 
| subrules | 子规则的序列;默认值为 []实验性:此规则使用的子规则列表。 | 
选择
unknown select(x, no_match_error='')
select() 是一个辅助函数,用于使规则属性可配置。如需了解详情,请参阅build 百科全书。
          
      参数
| 参数 | 说明 | 
|---|---|
| x | 必需 将配置条件映射到值的字典。每个键都是一个 Label 或一个用于标识 config_setting 或 constraint_value 实例的标签字符串。如需了解何时使用标签而非字符串,请参阅有关宏的文档。 | 
| no_match_error | 默认值为 ''如果没有任何条件匹配,则报告的可选自定义错误。 | 
子规则
Subrule subrule(implementation, attrs={}, toolchains=[], fragments=[], subrules=[])
参数
| 参数 | 说明 | 
|---|---|
| implementation | 函数;
                                     必需 实现此子规则的 Starlark 函数 | 
| attrs | dict;
                                     默认值为 {}用于声明子规则的所有(私有)属性的字典。 子规则只能具有标签类型的私有属性(即标签或标签列表)。与这些标签对应的已解析值会自动由 Bazel 作为具名实参传递给子规则的实现函数(因此实现函数必须接受与属性名称匹配的具名形参)。这些值的类型将为: 
 | 
| toolchains | 序列;
                                     默认值为 []如果设置,则表示此子规则所需的工具链集。该列表可以包含 String、Label 或 StarlarkToolchainTypeApi 对象,并且可以包含任意组合。通过检查当前平台找到工具链,并通过 ctx.toolchains提供给子规则实现。 | 
| fragments | 字符串的序列;默认值为 []子规则在目标配置中所需的配置 fragment 的名称列表。 | 
| subrules | 子规则的序列;默认值为 []此子规则所需的其他子规则的列表。 | 
tag_class
tag_class tag_class(attrs={}, *, doc=None)
参数
| 参数 | 说明 | 
|---|---|
| attrs | 默认值为 {}用于声明相应标记类的所有属性的字典。它从属性名称映射到属性对象(请参阅 attr 模块)。 | 
| doc | 字符串;或 None;
                                     默认值为None可由文档生成工具提取的标记类的说明。 | 
visibility
None visibility(value)设置当前正在初始化的 .bzl 模块的加载公开范围。
模块的加载可见性决定了其他 BUILD 文件和 .bzl 文件是否可以加载该模块。(这与底层 .bzl 源文件的目标可见性不同,后者决定了该文件是否可以作为其他目标的依赖项出现。)加载可见性在软件包级别起作用:要加载模块,执行加载的文件必须位于已获得模块可见性的软件包中。无论模块的可见性如何,始终可以在其自己的软件包中加载该模块。
每个 .bzl 文件只能调用一次 visibility(),并且只能在顶层调用,不能在函数内调用。首选样式是将此调用放在 load() 语句和确定实参所需的任何简短逻辑之后。
如果标志 --check_bzl_visibility 设置为 false,加载可见性违规行为将发出警告,但不会导致 build 失败。
          
      
参数
| 参数 | 说明 | 
|---|---|
| value | 必需 软件包规范字符串的列表或单个软件包规范字符串。 软件包规范的格式与  
 不允许使用“@”语法;所有规范都相对于当前模块的代码库进行解读。 如果  请注意,标志  |