原生

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。
支持原生规则和其他软件包辅助函数的内置模块。所有原生规则都将在此模块中显示为函数,例如 native.cc_library。请注意,原生模块仅在加载阶段可用(即,对于宏,不适用于规则实现)。属性会忽略 None 值,并将其视为未设置的属性。
您也可以使用以下函数:

会员

现有规则

unknown native.existing_rule(name)

返回一个不可变的类字典对象,用于描述此线程包中实例化的规则的属性;如果不存在该名称的规则实例,则返回 None

此处的类似字典的不可变对象是指支持类似字典的迭代、len(x)name in xx[name]x.get(name)x.items()x.keys()x.values() 的深度不可变对象 x

如果您设置了 --noincompatible_existing_rules_immutable_view 标志,系统会改为返回内容相同的新可变字典。

结果会包含一个属性条目,但私有属性(名称不以字母开头)和一些无法表示的旧版属性类型除外。此外,字典还包含规则实例的 namekind 条目(例如 'cc_binary')。

结果的值表示属性值,如下所示:

  • str、int 和 bool 类型的属性按原样表示。
  • 标签会转换为 ':foo' 格式的字符串(对于同一软件包中的目标)或 '//pkg:name' 格式(对于不同软件包中的目标)。
  • 列表以元组表示,将字典转换为新的可变字典。它们的元素以相同的方式进行递归转换。
  • 系统会返回 select 值,并按上述方式转换其内容。
  • 未在规则实例化期间为其指定值且计算默认值的属性会从结果中排除。(在分析阶段之前无法计算计算的默认值)。

请尽量避免使用此函数。这会使得 BUILD 文件变得脆弱且依赖于顺序。另请注意,它与规则从内部表单到 Starlark 的另外两种规则属性值存在细微差别:一种用于计算默认值,另一种用于 ctx.attr.foo

参数

参数 说明
name 必需
目标的名称。

现有规则

unknown native.existing_rules()

返回不可变的类似字典的对象,用于描述此线程的软件包中目前实例化的规则。类似于字典的对象的每个条目都会将规则实例的名称映射到将由 existing_rule(name) 返回的结果。

此处的类似字典的不可变对象是指支持类似字典的迭代、len(x)name in xx[name]x.get(name)x.items()x.keys()x.values() 的深度不可变对象 x

如果您设置了 --noincompatible_existing_rules_immutable_view 标志,系统会改为返回内容相同的新可变字典。

注意:请尽量避免使用此功能。这会使得 BUILD 文件变得脆弱且依赖于顺序。此外,如果设置了 --noincompatible_existing_rules_immutable_view 标志,该函数的开销可能会非常大,尤其是在循环内调用时。

导出文件

None native.exports_files(srcs, visibility=None, licenses=None)

指定属于其他软件包的文件,并导出至其他软件包。

参数

参数 说明
srcs sequence of strings;必需
要导出的文件的列表。
visibility sequence; or None;默认值 = None
可以指定可见性声明。这些文件将对指定目标可见。如果未指定可见性,则文件将对每个软件包可见。
licenses sequence of strings; or None;默认值 = None
要指定的许可。

glob

sequence native.glob(include=[], exclude=[], exclude_directories=1, allow_empty=unbound)

Glob 会返回当前软件包中每个符合以下条件的文件的新可变排序列表:
  • 匹配 include 中的至少一个模式。
  • 不符合 exclude 中的任何模式(默认为 [])。
如果启用了 exclude_directories 参数(设置为 1),则结果中会忽略类型为目录的文件(默认为 1)。

参数

参数 说明
include sequence of strings;默认值为 []
要包含的 glob 模式列表。
exclude sequence of strings;默认值为 []
要排除的 glob 模式列表。
exclude_directories default = 1
标记是否排除目录。
allow_empty default = unbound
是否允许 glob 模式不匹配任何内容。如果“allow_empty”为 False,那么每个个人包含模式都必须与某些内容匹配,并且最终结果必须是非空的(在排除“排除”模式的匹配之后)。

package_group

None native.package_group(name, packages=[], includes=[])

此函数定义一组软件包,并为组分配一个标签。该标签可在 visibility 属性中引用。

参数

参数 说明
name 必需
此规则的唯一名称。
packages sequence of strings;默认值为 []
此组中软件包的完整枚举。
includes sequence of strings;默认值为 []
此软件包中包含的其他软件包组。

软件包名称

string native.package_name()

要评估的软件包的名称。例如,在 BUILD 文件 some/package/BUILD 中,其值将是 some/package。如果 BUILD 文件调用 .bzl 文件中定义的函数,package_name() 将与调用方 BUILD 文件软件包匹配。此函数等效于已弃用的变量 PACKAGE_NAME

代码库名称

string native.repository_name()

从中调用规则或构建扩展程序的代码库的名称。例如,在 WORKSPACE 节 local_repository(name='local', path=...) 调用存在的软件包中,它将设置为 @local。在主代码库的软件包中,此属性将设置为 @。此函数等效于已弃用的变量 REPOSITORY_NAME

子软件包

sequence native.subpackages(include, exclude=[], allow_empty=False)

返回当前软件包的每个直接子软件包的新可变列表,无论文件系统目录深度如何。返回的列表经过排序,包含相对于当前软件包的子软件包的名称。建议使用 bazel_skylib.subpackages 模块中的方法,而不是直接调用此函数。

参数

参数 说明
include sequence of strings;必需
要包含在子软件包扫描中的 glob 模式列表。
exclude sequence of strings;默认值为 []
。要从子软件包扫描中排除的 glob 模式列表。
allow_empty default = False
调用是否返回空列表时失败。默认情况下,空列表表示 BUILD 文件中可能存在对 subpackages() 调用过多的错误。在这种情况下,如果设置为 true,则此函数可成功运行。