BUILD 文件中提供的方法。另请参阅“构建百科全书”,了解其他函数和构建规则,它们也可在 BUILD 文件中使用。
成员
- depset
- existing_rule
- existing_rules
- exports_files
- glob
- module_name
- module_version
- package_group
- package_name
- package_relative_label
- repo_name
- repository_name
- 选择
- 子软件包
出发
depset depset(direct=None, order="default", *, transitive=None)创建一个 depset。
direct
参数是一个 Depset 的直接元素列表,transitive
参数是一个 Depset 列表,其元素会成为已创建的 Depset 的间接元素。将 depset 转换为列表时,返回元素的顺序由 order
参数指定。如需了解详情,请参阅设置概览。
已弃用的所有元素(直接和间接)都必须属于同一种类型,可通过表达式 type(x)
获取。
由于基于哈希的集合用于在迭代期间消除重复项,因此设置的所有元素都应该可进行哈希处理。不过,目前并非在所有构造函数中以一致的方式检查这种不变性。使用 --incompatible_always_check_depset_elements 标志可启用一致性检查;在将来的版本中,这将是默认行为;请参阅问题 10313。
此外,元素目前必须是不可变的,尽管将来会放宽此限制。
已创建的 Depset 的顺序应与其 transitive
的 Depset 的顺序兼容。"default"
订单与其他任何订单兼容,其他所有订单仅与自身兼容。
参数
参数 | 说明 |
---|---|
direct
|
sequence;或 None ;
默认值为 None 一个 Depset 的 direct 元素列表。 |
order
|
默认值为 "default" 新出发集的遍历策略。请参阅此处了解可能的值。 |
transitive
|
depset 的 sequence;或 None ;
默认值为 None 一个废弃设置列表,其中的元素将成为其间接元素。 |
existing_rule
unknown existing_rule(name)返回一个类似于字典的不可变对象,该对象描述在此线程的软件包中实例化的规则的属性;如果不存在具有该名称的规则实例,则返回
None
。在这里,“类字典的不可变对象”是指支持类似字典的迭代 x
、len(x)
、name in x
、x[name]
、x.get(name)
、x.items()
、x.keys()
和 x.values()
的深度不可变对象。
如果设置了 --noincompatible_existing_rules_immutable_view
标志,则改为返回具有相同内容的新可变字典。
结果包含每个属性的条目,但私有属性(其名称不以字母开头)和一些无法表示的旧版属性类型除外。此外,字典还包含规则实例的 name
和 kind
条目(例如 'cc_binary'
)。
结果的值表示属性值,如下所示:
- str、int 和 bool 类型的属性按原样表示。
- 对于同一软件包中的目标,标签转换为以下形式的字符串:
':foo'
;对于其他软件包中的目标,转换为'//pkg:name'
形式的字符串。 - 列表以元组表示,而字典会转换为新的可变字典。它们的元素以相同的方式进行递归转换。
- 系统会返回
select
值及其内容(如上所述)。 - 未在规则实例化期间指定任何值,并且已计算默认值的属性会从结果中排除。(直到分析阶段才能计算计算出的默认值。)
请尽可能避免使用此函数。这会使 BUILD 文件变得脆弱并且依赖于顺序。另请注意,它与规则属性值的其他两个从内部形式转换为 Starlark 存在细微区别:一个由计算默认值使用,另一个由 ctx.attr.foo
使用。
参数
参数 | 说明 |
---|---|
name
|
必需 目标的名称。 |
existing_rules
unknown existing_rules()返回一个不可变的类似字典的对象,该对象描述到目前为止已在此线程的软件包中实例化的规则。类似字典的对象的每个条目都会将规则实例的名称映射到
existing_rule(name)
将返回的结果。在这里,“类字典的不可变对象”是指支持类似字典的迭代 x
、len(x)
、name in x
、x[name]
、x.get(name)
、x.items()
、x.keys()
和 x.values()
的深度不可变对象。
如果设置了 --noincompatible_existing_rules_immutable_view
标志,则改为返回具有相同内容的新可变字典。
注意:请尽可能避免使用此函数。这会使 BUILD 文件变得脆弱并且依赖于顺序。此外,如果设置了 --noincompatible_existing_rules_immutable_view
标志,此函数的开销可能会很高,尤其是在循环中调用时。
exports_files
None
exports_files(srcs, visibility=None, licenses=None)
指定属于此软件包并导出到其他软件包的文件的列表。
参数
参数 | 说明 |
---|---|
srcs
|
string 的序列;
必需 要导出的文件的列表。 |
visibility
|
sequence;或 None ;
默认值为 None 可以指定可见性声明。这些文件对指定目标可见。如果未指定可见性,则文件将对每个软件包可见。 |
licenses
|
string 的序列;或 None ;
默认值为 None 要指定的许可。 |
glob
sequence glob(include=[], exclude=[], exclude_directories=1, allow_empty=unbound)Glob 会返回一个可变的新列表,其中包含当前软件包中符合以下条件的每个文件:
- 匹配
include
中的至少一个模式。 - 与
exclude
中的任何模式都不匹配(默认值为[]
)。
exclude_directories
参数已启用(设为 1
),则结果中将忽略类型为“目录”的文件类型(默认为 1
)。
参数
参数 | 说明 |
---|---|
include
|
string 的序列;
默认值为 [] 要包含的 glob 模式的列表。 |
exclude
|
string 的序列;
默认值为 [] 要排除的 glob 模式的列表。 |
exclude_directories
|
默认值为 1 是否排除目录的标志。 |
allow_empty
|
默认值为 unbound 我们是否允许 glob 模式不进行任何匹配。如果 `allow_empty` 为 False,则每个 include 模式必须与某些内容匹配,并且最终结果必须非空(在排除 `exclude` 模式的匹配项之后)。 |
module_name
string module_name()与此软件包所在的代码库关联的 Bazel 模块的名称。如果此软件包来自在 WORKSPACE 中定义的代码库,而不是 MODULE.bazel,则此字段为空。对于由模块扩展程序生成的代码库,这是托管扩展程序的模块的名称。它与
module_ctx.modules
中显示的 module.name
字段相同。
可能会返回 None
。
module_version
string module_version()与此软件包所在的代码库关联的 Bazel 模块的版本。如果此软件包来自在 WORKSPACE 中定义的代码库,而不是 MODULE.bazel,则此字段为空。对于由模块扩展程序生成的代码库,这是托管扩展程序的模块的版本。它与
module_ctx.modules
中显示的 module.version
字段相同。
可能会返回 None
。
package_group
None
package_group(name, packages=[], includes=[])
此函数定义一组软件包,并为这组软件包分配一个标签。可以在 visibility
属性中引用该标签。
参数
参数 | 说明 |
---|---|
name
|
必需 此规则的唯一名称。 |
packages
|
string 的序列;
默认值为 [] 此组中软件包的完整枚举。 |
includes
|
string 的序列;
默认值为 [] 此软件包中包含的其他软件包组。 |
package_name
string package_name()要评估的软件包的名称,不包含代码库名称。例如,在 BUILD 文件
some/package/BUILD
中,其值为 some/package
。如果 BUILD 文件调用 .bzl 文件中定义的函数,package_name()
将与调用方 BUILD 文件软件包匹配。
package_relative_label
Label package_relative_label(input)在当前正在初始化的软件包的上下文(即正在执行当前宏的
BUILD
文件)的上下文中,将输入字符串转换为 Label 对象。如果输入已经是 Label
,则原样返回。此函数只能在评估 BUILD 文件及其直接或间接调用的宏时调用;例如,不能在规则实施函数中调用该函数。
此函数的结果与通过将给定字符串传递给 BUILD 文件中声明的目标的标签值属性而生成的 Label
值相同。
使用说明:此函数与 Label() 之间的区别在于,Label()
使用的是调用该函数的 .bzl
文件的上下文,而不是 BUILD
文件的软件包。如果您需要引用硬编码到宏中的固定目标(例如编译器),请使用 Label()
。如果您需要将 BUILD 文件提供的标签字符串标准化为 Label
对象,请使用 package_relative_label()
。(除了 BUILD 文件或调用 .bzl 文件外,无法在软件包上下文中将字符串转换为 Label
。因此,外部宏应始终优先将 Label 对象传递给内部宏,而不是标签字符串。)
参数
参数 | 说明 |
---|---|
input
|
string;或标签;
必需 输入标签字符串或标签对象。如果传递了 Label 对象,系统会按原样返回该对象。 |
repo_name
string repo_name()代码库的规范名称,其中包含当前正在评估的软件包,不带前导 @ 符号。
repository_name
string repository_name()实验性。此 API 处于实验阶段,随时可能更改。请勿依赖它。您可以通过将
--+incompatible_enable_deprecated_label_apis
设为已废弃,在实验阶段将其启用。优先考虑改用
repo_name
,它不包含虚假前导 @ 符号,但在其他方面表现完全相同。代码库的规范名称,其中包含当前正在评估的软件包,带有一个 @ 符号 (@
) 前缀。例如,在由 WORKSPACE 节 local_repository(name='local', path=...)
调用的软件包中,它将被设置为 @local
。在主代码库的软件包中,此属性将设置为 @
。
select
unknown select(x, no_match_error='')
select()
是一个辅助函数,用于使规则属性可配置。如需了解详情,请参阅构建百科全书。
参数
参数 | 说明 |
---|---|
x
|
必需 将配置条件映射到值的字典。每个键都是一个标签或用于标识 config_setting 或 constraint_value 实例的标签字符串。如需了解何时使用标签而非字符串,请参阅有关宏的文档。 |
no_match_error
|
默认值为 '' (可选)没有条件匹配时要报告的自定义错误。 |
子软件包
sequence subpackages(include, exclude=[], allow_empty=False)返回当前软件包的每个直接子软件包的新可变列表,而不考虑文件系统目录深度。返回的列表已排序,其中包含子软件包相对于当前软件包的名称。建议您优先使用 bazel_skylib.subpackages 模块中的方法,而不是直接调用此函数。
参数
参数 | 说明 |
---|---|
include
|
string 的序列;
必需 要包含在子软件包扫描中的 glob 模式的列表。 |
exclude
|
string 的序列;
默认值为 [] 要从子软件包扫描中排除的 glob 模式列表。 |
allow_empty
|
默认值为 False 调用是否失败(如果调用返回空列表)。默认情况下,空列表表示 BUILD 文件中对 subpackages() 的调用可能出错。在这种情况下,设置为 true 可让此函数成功。 |