Objective-C 规则

规则

j2objc_library

j2objc_library(name, deps, compatible_with, deprecation, distribs, entry_classes, features, jre_deps, licenses, restricted_to, tags, target_compatible_with, testonly, visibility)

此规则使用 J2ObjC 转换 Java 源代码 导出到 Objective-C,后者可用作 objc_library 和 objc_binary 的依赖项 规则。有关 J2ObjC 本身的详细信息,请参阅 J2ObjC 网站

可以使用 build 标志指定自定义 J2ObjC 转译标志 --j2objc_translation_flags

请注意,j2objc_library 目标中包含的翻译文件将 使用默认编译配置编译的,该配置与 在属性中未指定编译选项的 objc_library 规则。

此外,系统会在目标级别(而不是源代码级别)对生成的代码进行去重。如果您有两个 包含相同 Java 源文件的不同 Java 目标,您可能会看到重复的符号错误 。解决此问题的正确方法是将共享的 Java 源文件移至 一个可依赖的单独通用目标

参数

属性
name

Name; required

此目标的唯一名称。

deps

List of labels; optional

j2objc_libraryjava_libraryjava_importjava_proto_library目标包含以下元素: 要转译为 Objective-C 的 Java 文件。

可达到的所有java_libraryjava_import目标 通过 exportsdepsruntime_deps 传递 进行翻译和编译目前不支持 Java 生成的文件 注解处理或不带 srcjarjava_import 目标 。

J2ObjC 转换的工作方式因 Java 源代码的类型而异 包含在传递闭包中的文件。对于 java_librarysrcs,对应的 .h 和 .m 源文件 。对于 srcs 中包含的每个源 jar 第 java_library 或第 srcjar 个(共 java_import 个), 系统会生成相应的 .h 和 .m 源文件以及该 jar 的所有代码。

用户可以在其代码中导入 J2ObjC 生成的头文件。以下项目的导入路径: 这些文件是原始 Java 工件的相对根路径。例如: //some/package/foo.java 的导入路径为 some/package/foo.h//some/package/bar.srcjarsome/package/bar.h

如果 proto_library 规则包含在此规则的传递闭包中,J2ObjC proto 也会 在二进制文件级别生成、编译和链接。对于 proto //some/proto/foo.proto,用户可以使用导入功能来引用生成的代码 路径 some/proto/foo.j2objc.pb.h

entry_classes

List of strings; optional

Java 类的列表,该类的翻译后的 ObjC 对应项将被直接引用 由用户 ObjC 代码触发。如果 --j2objc_dead_code_removal 标志处于启用状态,则此属性为必需属性。Java 类应在其规范名称中指定,规范名称由 Java 语言规范。 指定 --j2objc_dead_code_removal 标志后,系统将列出条目类 将以传递方式收集,并用作执行死代码分析的入口点。 然后,未使用的类将从最终的 ObjC app bundle 中移除。
jre_deps

List of labels; optional

此转换的所有 Java 代码所需的其他 JRE 模拟库的列表 j2objc_library 规则。默认情况下,仅关联核心 JRE 功能。

objc_import

objc_import(name, hdrs, alwayslink, archives, compatible_with, deprecation, distribs, features, includes, licenses, restricted_to, sdk_dylibs, sdk_frameworks, sdk_includes, tags, target_compatible_with, testonly, textual_hdrs, visibility, weak_sdk_frameworks)

此规则采用以下形式封装已编译的静态库: .a 文件。它还允许使用 objc_library 支持的属性。

参数

属性
name

Name; required

此目标的唯一名称。

hdrs

List of labels; optional

我们发布了一系列 C、C++、Objective-C 和 Objective-C++ 头文件 添加到依赖规则中的来源。

这些头文件用于描述库的公共接口 可供本规则中的来源收录的或可作为独立来源纳入的 规则。此库的客户端不应包含的标头 应列在 srcs 属性中。

如果启用了模块,这些依赖项将在源代码中单独进行编译。

Boolean; optional; default is False

如果为 1,则表示(直接或间接)依赖于此 会链接至 srcsnon_arc_srcs,即使其中一些不包含 二进制文件引用的符号。 如果 二进制文件。例如,如果您的代码注册以接收一些回调 提供的服务
archives

List of labels; required

提供给 Objective-C 目标的 .a 文件列表, 都取决于此目标
includes

List of strings; optional

要添加到此定位条件的 #include/#import 个搜索路径的列表 以及所有依赖的目标。 这是为了支持不 在其路径中指定完整的工作区路径 #import/#include 语句。

路径是相对于软件包目录进行解释的,并且 genfile 和 bin 根目录(例如 blaze-genfiles/pkg/includedir) 和 blaze-out/pkg/includedir)。 实际的客户端根目录

COPTS 不同,系统会为此规则添加这些标记 以及依赖于它的所有规则(注意:并非其所依赖的规则!)是 必须格外小心,因为这可能会造成深远的影响。如有疑问,请添加 “-iquote”标志更改为 COPTS

sdk_dylibs

List of strings; optional

要关联的 SDK .dylib 库的名称。例如,“libz”或 “libarchive”。 "libc++"如果二进制文件包含任何 C++ 或 C++ 代码, 依赖项树中的 Objective-C++ 源代码。关联二进制文件时 该二进制文件的传递依赖关系图中指定的所有库都是 。
sdk_frameworks

List of strings; optional

要关联的 SDK 框架的名称(例如“AddressBook”、“QuartzCore”)。“UIKit”和 “基础”在面向 iOS、tvOS 和 watchOS 平台进行构建时始终包含。 对于 macOS,仅支持“Foundation”始终包含在其中。

关联某个顶级 Apple 二进制文件时,该二进制文件的 传递依赖关系图的链接。

sdk_includes

List of strings; optional

要添加到此定位条件的 #include/#import 个搜索路径的列表 以及所有依赖的目标,其中每条路径都相对于 $(SDKROOT)/usr/include
textual_hdrs

List of labels; optional

受支持的 C、C++、Objective-C 和 Objective-C++ 文件的列表 此规则中的源文件或该规则的用户包含作为标头 库。与 HDR 不同,它们不会与 来源。
weak_sdk_frameworks

List of strings; optional

要与之建立弱关联的 SDK 框架的名称。例如, “MediaAccessibility”。 与定期关联的 SDK 框架不同, 如果关联, 。

objc_library

objc_library(name, deps, srcs, data, hdrs, alwayslink, compatible_with, copts, defines, deprecation, distribs, enable_modules, exec_compatible_with, exec_properties, features, includes, licenses, linkopts, module_map, module_name, non_arc_srcs, pch, restricted_to, runtime_deps, sdk_dylibs, sdk_frameworks, sdk_includes, tags, target_compatible_with, testonly, textual_hdrs, toolchains, visibility, weak_sdk_frameworks)

此规则会根据给定 Objective-C 源文件生成静态库。

参数

属性
name

Name; required

此目标的唯一名称。

deps

List of labels; optional

关联在一起形成最终 app bundle 的目标列表。
srcs

List of labels; optional

C、C++、Objective-C 和 Objective-C++ 源文件和头文件的列表 和/或(“.s”“.S”或“.asm”)汇编源文件 库目标。 这些是您已签入的文件以及所有已生成的文件。 源文件会使用 Clang 编译为 .o 文件。头文件 可以由 srcs 属性中的任何来源或标头包含/导入 而不是按 HDR 中的标头或依赖于此目标的任何目标 。 此外,可将预编译的 .o 文件作为 src 提供。请注意 确保所提供的 .o 文件架构和 以免缺少符号链接器错误。
hdrs

List of labels; optional

我们发布了一系列 C、C++、Objective-C 和 Objective-C++ 头文件 添加到依赖规则中的来源。

这些头文件用于描述库的公共接口 可供本规则中的来源收录的或可作为独立来源纳入的 规则。此库的客户端不应包含的标头 应列在 srcs 属性中。

如果启用了模块,这些依赖项将在源代码中单独进行编译。

Boolean; optional; default is False

如果为 1,则表示(直接或间接)依赖于此 会链接至 srcsnon_arc_srcs,即使其中一些不包含 二进制文件引用的符号。 如果 二进制文件。例如,如果您的代码注册以接收一些回调 提供的服务
copts

List of strings; optional

要传递给编译器的额外标志。 需遵循 "Make variable" 替换和 Bourne shell 令牌化。 这些标记仅适用于此目标,而不适用于 或依赖于它的对象。

请注意,对于生成的 Xcode 项目,使用“-I”指定的目录路径旗帜 系统会解析 copts,并附上“$(WORKSPACE_ROOT)/”前缀是否为相对路径; 添加到关联的 Xcode 目标的标头搜索路径中。

defines

List of strings; optional

要传递给编译器的额外 -D 标志。他们应该在 采用 KEY=VALUEKEY 格式,并且 不仅会传递到针对该目标的编译器(作为 copts 且所有 objc_ 的依赖项都属于此目标。 需遵循 "Make variable" 替换和 Bourne shell 令牌化
enable_modules

Boolean; optional; default is False

启用 Clang 模块支持(通过 -fmodules)。 将此值设为 1 将允许您 @import 系统标头和其他目标: @导入 UIKit; @import path_to_package_target;
includes

List of strings; optional

要添加到此定位条件的 #include/#import 个搜索路径的列表 以及所有依赖的目标。 这是为了支持不 在其路径中指定完整的工作区路径 #import/#include 语句。

路径是相对于软件包目录进行解释的,并且 genfile 和 bin 根目录(例如 blaze-genfiles/pkg/includedir) 和 blaze-out/pkg/includedir)。 实际的客户端根目录

COPTS 不同,系统会为此规则添加这些标记 以及依赖于它的所有规则(注意:并非其所依赖的规则!)是 必须格外小心,因为这可能会造成深远的影响。如有疑问,请添加 “-iquote”标志更改为 COPTS

linkopts

List of strings; optional

要传递给链接器的额外标志。
module_map

Label; optional

此目标的自定义 Clang 模块映射。不建议使用自定义模块映射。大多数人 用户应使用由 Bazel 生成的模块映射。 如果指定,则 Bazel 不会为此目标生成模块映射,但会将 提供的模块映射到编译器。
module_name

String; optional

设置此目标的模块名称。默认情况下,模块名称是带有 将所有特殊符号替换为 _,例如//foo/baz:bar can be import as foo_baz_bar。
non_arc_srcs

List of labels; optional

为创建 不使用 ARC 的库目标。 系统处理此属性中的文件与 srcs 属性,但在未启用 ARC 的情况下进行编译。
pch

Label; optional

用于附加到要编译的每个源文件的头文件(弧形 和非弧形)。 我们不建议在 BUILD 文件中使用 pch 文件, 被视为已弃用。由于 pch 文件实际上并未预编译,因此 构建速度的增强功能,并且只是一种全局依赖项。基于 build 你其实更有效率,包括直接 找到它。
runtime_deps

List of labels; optional

在运行时延迟加载的框架目标的列表。它们包含在 app bundle,但在构建时未进行关联。
sdk_dylibs

List of strings; optional

要关联的 SDK .dylib 库的名称。例如,“libz”或 “libarchive”。 "libc++"如果二进制文件包含任何 C++ 或 C++ 代码, 依赖项树中的 Objective-C++ 源代码。关联二进制文件时 该二进制文件的传递依赖关系图中指定的所有库都是 。
sdk_frameworks

List of strings; optional

要关联的 SDK 框架的名称(例如“AddressBook”、“QuartzCore”)。“UIKit”和 “基础”在面向 iOS、tvOS 和 watchOS 平台进行构建时始终包含。 对于 macOS,仅支持“Foundation”始终包含在其中。

关联某个顶级 Apple 二进制文件时,该二进制文件的 传递依赖关系图的链接。

sdk_includes

List of strings; optional

要添加到此定位条件的 #include/#import 个搜索路径的列表 以及所有依赖的目标,其中每条路径都相对于 $(SDKROOT)/usr/include
textual_hdrs

List of labels; optional

受支持的 C、C++、Objective-C 和 Objective-C++ 文件的列表 此规则中的源文件或该规则的用户包含作为标头 库。与 HDR 不同,它们不会与 来源。
weak_sdk_frameworks

List of strings; optional

要与之建立弱关联的 SDK 框架的名称。例如, “MediaAccessibility”。 与定期关联的 SDK 框架不同, 如果关联, 。

available_xcodes

available_xcodes(name, default, deprecation, distribs, features, licenses, tags, testonly, versions, visibility)

xcode_config 规则实例可以依赖于此规则的两个目标 表示远程和本地可用的 Xcode 版本。 这允许从集合可用的 Xcode 中选择官方 XCode 版本。

参数

属性
name

Name; required

此目标的唯一名称。

default

Label; required; nonconfigurable

此平台的默认 Xcode 版本。
versions

List of labels; optional; nonconfigurable

此平台上可用的 Xcode 版本。

xcode_config

xcode_config(name, default, deprecation, distribs, features, licenses, local_versions, remote_versions, tags, testonly, versions, visibility)

此规则的单个目标可由 --xcode_version_config build 引用 标志,用于将 --xcode_version 标志转换为可接受的官方 Xcode 版本。 这允许从多个已注册的别名中选择官方 Xcode 版本。

参数

属性
name

Name; required

此目标的唯一名称。

default

Label; optional; nonconfigurable

要使用的默认官方 Xcode 版本。 如果出现以下情况,则使用由提供的 xcode_version 目标指定的版本: 未指定 xcode_version 构建标志。必须(如果有) 已设置 versions。如果 remote_versions 或 已设置 local_versions
local_versions

Label; optional; nonconfigurable

xcode_version targets that are available locally. These are used along with local_versions to select a mutually available version. This may not be set if versions is set.
remote_versions

Label; optional; nonconfigurable

xcode_version targets that are available remotely. These are used along with remote_versions to select a mutually available version. This may not be set if versions is set.
versions

List of labels; optional; nonconfigurable

xcode_version targets that may be used. If the value of the xcode_version build flag matches one of the aliases or version number of any of the given xcode_version targets, the matching target will be used. This may not be set if remote_versions or local_versions is set. 项已接受

xcode_version

xcode_version(name, default_ios_sdk_version, default_macos_sdk_version, default_tvos_sdk_version, default_watchos_sdk_version, deprecation, distribs, features, licenses, tags, testonly, version, visibility)

表示单个官方 xcode 版本,其中包含该 xcode 版本的可接受别名。 请参阅 xcode_config 规则。

参数

属性
name

Name; required

此目标的唯一名称。

default_ios_sdk_version

String; optional; nonconfigurable

使用此版本的 Xcode 时默认使用的 iOS SDK 版本。 ios_sdk_version 构建标志将替换此处指定的值。
default_macos_sdk_version

String; optional; nonconfigurable

使用此版本的 Xcode 时,默认使用的 macosx SDK 版本。 macos_sdk_version 构建标志将替换此处指定的值。
default_tvos_sdk_version

String; optional; nonconfigurable

使用此版本的 Xcode 时,默认使用的 tvos SDK 版本。 tvos_sdk_version 构建标志将替换此处指定的值。
default_watchos_sdk_version

String; optional; nonconfigurable

使用此版本的 Xcode 时,默认使用的 watchos SDK 版本。 watchos_sdk_version 构建标志将替换此处指定的值。
version

String; required; nonconfigurable

Xcode 版本的官方版本号。