native.cc_library
。请注意,原生模块仅在加载阶段可用(即对于宏,不可用于规则实现)。属性会忽略 None
值,并将其视为未设置该属性。您还可以使用以下函数:
成员
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 ;
default = None可以指定可见性声明。这些文件将对指定的目标可见。如果未指定可见性,则文件将对每个软件包可见。 |
licenses
|
sequence of strings; or 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
|
default = 1 用于指示是否排除目录的标志。 |
allow_empty
|
default = unbound 我们是否允许 glob 模式不匹配任何内容。如果“allow_empty”为 False,则每个包含模式都必须匹配某些内容,并且最终结果必须非空(在排除“excluded”模式的匹配项之后)。 |
package_group
None native.package_group(name, packages=[], includes=[])此函数定义一组软件包,并为组分配标签。可以在
visibility
属性中引用该标签。
参数
参数 | 说明 |
---|---|
name
|
必需 此规则的唯一名称。 |
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
。
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 ;
default = []要从子软件包扫描中排除的 glob 模式列表。 |
allow_empty
|
default = False 调用返回空列表时是否失败。默认情况下,空列表表示 BUILD 文件中可能存在错误,其中对 subpackages() 的调用是多余的。如果设置为 true,则此函数可在这种情况下成功运行。 |