native.cc_library
。请注意,原生模块仅在加载阶段可用(即适用于宏,而不适用于规则实现)。属性会忽略 None
值,并将其视为未设置的属性。您还可以使用以下函数:
成员
- existing_rule
- existing_rules
- exports_files
- glob
- module_name
- module_version
- package_group
- package_name
- package_relative_label
- repository_name
- 子软件包
existing_rule
unknown native.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 native.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 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
|
default = unbound 是否允许全局通配模式与任何内容都不匹配。如果 `allow_empty` 为 False,则每个包含模式都必须与某个内容匹配,并且最终结果也必须不为空(在排除 `exclude` 模式的匹配后)。 |
module_name
string native.module_name()与此软件包所在的代码库关联的 Bazel 模块的名称。如果此软件包来自 WORKSPACE 中定义的代码库(而非 MODULE.bazel),则此字段为空。对于由模块扩展程序生成的代码库,这是托管扩展程序的模块的名称。它与
module_ctx.modules
中显示的 module.name
字段相同。
可以返回 None
。
module_version
string native.module_version()与此软件包所在的代码库关联的 Bazel 模块的版本。如果此软件包来自 WORKSPACE 中定义的代码库(而非 MODULE.bazel),则此字段为空。对于由模块扩展生成的代码库,这是托管扩展的模块的版本。它与
module_ctx.modules
中显示的 module.version
字段相同。
可以返回 None
。
package_group
None native.package_group(name, packages=[], includes=[])此函数用于定义一组软件包并为该组分配标签。您可以在
visibility
属性中引用该标签。
参数
参数 | 说明 |
---|---|
name
|
required 此规则的唯一名称。 |
packages
|
sequence of strings ;
default = []此组中软件包的完整枚举。 |
includes
|
sequence of strings ;
default = []此软件包组中包含的其他软件包组。 |
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 对象传递给内部宏,而不是传递 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
|
default = False 如果调用返回空列表,是否失败。默认情况下,空列表表示 BUILD 文件中调用 subpackages() 是多余的,可能会导致错误。在这种情况下,设置为 true 可让此函数成功。 |