本国的/原生的/土著

一个内置模块,用于支持原生规则和其他软件包辅助函数。所有原生规则都以函数的形式在此模块中显示,例如native.cc_library。请注意,原生模块仅在加载阶段可用(即适用于宏,而不适用于规则实现)。属性会忽略 None 值,并将其视为未设置的属性。
您还可以使用以下函数:

成员

existing_rule

unknown native.existing_rule(name)

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

在这里,“类字典的不可变对象”是指支持类似字典的迭代 xlen(x)name in xx[name]x.get(name)x.items()x.keys()x.values() 的深度不可变对象。

如果设置了 --noincompatible_existing_rules_immutable_view 标志,则改为返回具有相同内容的新可变字典。

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

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

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

请尽可能避免使用此函数。这会导致 BUILD 文件变得脆弱且依赖于顺序。另请注意,该转换与规则属性值的其他两个从内部形式转换为 Starlark 略有不同:一个由计算默认值使用,另一个由 ctx.attr.foo 使用。

参数

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

existing_rules

unknown native.existing_rules()

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

在这里,不可变的字典型对象是指支持字典型迭代的深层不可变对象 xlen(x)name in xx[name]x.get(name)x.items()x.keys()x.values()

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

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

exports_files

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; default = []
要包含的 glob 模式的列表。
exclude sequence of strings; default = []
要排除的 glob 模式的列表。
exclude_directories 默认值 = 1
用于指示是否要排除目录。
allow_empty 默认值 = 未绑定
我们是否允许 glob 模式不进行任何匹配。如果 `allow_empty` 为 False,则每个包含模式都必须与某个内容匹配,并且最终结果也必须不为空(在排除 `exclude` 模式的匹配后)。

package_group

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

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

参数

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

package_name

string native.package_name()

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

package_relative_label

Label native.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; or Label; 必需
输入标签字符串或标签对象。如果传递 Label 对象,系统会原封不动地将其返回。

repository_name

string native.repository_name()

从中调用规则或 build 扩展程序的代码库的名称。例如,在由 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 默认值 = False
调用是否失败(如果调用返回空列表)。默认情况下,空列表表示 BUILD 文件中对 subpackages() 的调用可能出错。在这种情况下,设置为 true 可让此函数成功。