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_translation_flags 指定自定义 J2ObjC 转译标志。

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

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

参数

属性
name

Name; required

此目标的唯一名称。

deps

List of labels; optional

j2objc_libraryjava_libraryjava_importjava_proto_library 目标的列表,其中包含要转译为 Objective-C 的 Java 文件。

将转换和编译可通过 exportsdepsruntime_deps 传递的所有 java_libraryjava_import 目标,包括通过 Java 注解处理生成的文件。对于未指定 srcjar 的 code>java_import 目标,不受支持。

J2ObjC 转换的工作方式有所不同,具体取决于传递闭包中包含的源 Java 源文件的类型。对于 java_librarysrcs 中包含的每个 .java 源文件,将生成相应的 .h 和 .m 源文件。对于 java_librarysrcsjava_importsrcjar 中包含的每个源代码 jar,将生成包含相应 jar 的所有代码的 .h 和 .m 源文件。

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

如果 proto_library 规则处于此规则的闭包状态,J2ObjC proto 也会在二进制文件级别生成、编译和关联。对于 proto //some/proto/foo.proto,用户可以使用导入路径 some/proto/foo.j2objc.pb.h 来引用生成的代码。

entry_classes

List of strings; optional

用户 ObjC 代码将直接引用其对应的 ObjC 类对应的 Java 类列表。如果已开启 --j2objc_dead_code_removal 标志,则必须提供此属性。Java 类应按 Java 语言规范定义的规范名称指定。如果指定了 --j2objc_dead_code_removal 标志,系统将以传递方式收集条目类的列表,并将其用作入口点来执行死代码分析。未使用的类将从最终 ObjC app bundle 中移除。
jre_deps

List of labels; optional

j2objc_library 规则转换的所有 Java 代码所需的额外 JRE 模拟库列表。默认情况下,仅链接核心 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 语句中指定整个工作区路径的第三方库和开源库。

这些路径相对于软件包目录进行解释,除了实际的客户端根目录之外,还包含根文件和 bin 根目录(例如 blaze-genfiles/pkg/includedirblaze-out/pkg/includedir)。

COPTS 不同,这些标记是为此规则以及依赖于此规则的每条规则添加的。(注意:并非依赖于它的规则!)请格外小心,因为这可能会产生深远的影响。如有疑问,请改为为“COPTS”添加“-iquote”标记。

sdk_dylibs

List of strings; optional

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

List of strings; optional

要关联的 SDK 框架的名称(例如“AddressBook”、“QuartzCore”)。在针对 iOS、tvOS 和 watchOS 平台进行构建时,始终包含“UIKit”和“Foundation”。对于 macOS,系统始终只包含“基础”版本。

关联顶级 Apple 二进制文件时,系统会列出该二进制文件的传递依赖项图中列出的所有 SDK 框架。

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, 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

关联在一起以形成最终捆绑包的目标列表。
srcs

List of labels; optional

C、C++、Objective-C 和 Objective-C++ 源代码文件列表和/或(`.s`、`.S` 或 `.asm`)汇编源文件,经处理后用于创建库目标。 这些是您已签入的文件以及任何生成的文件。 使用 Clang 将源文件编译为 .o 文件。头文件可以由此目标的 src 属性中的任何来源或头文件包含/导入,但不能由 hdr 中的头文件或依赖于此规则的任何目标包含/导入。 此外,还可将预编译的 .o 文件作为 src 提供。请务必确保所提供的 .o 文件的架构和 build 的架构保持一致,以免缺少符号链接器错误。
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

要传递给编译器的额外标志。使用使变量替代和外壳 shell 词元化。这些标志将仅应用于此目标,而不适用于其或依赖此目标的那些标志。

请注意,对于生成的 Xcode 项目,系统会解析在 copt 中使用“-I”标志指定的目录路径,如果这些路径是相对路径,则会在其前面添加“$(WORKSPACE_ROOT)/”,然后将其添加到关联 Xcode 目标的标头搜索路径中。

defines

List of strings; optional

需要传递到编译器的额外 -D 标志。它们应该采用 KEY=VALUEKEY 的形式,并且不仅会传递到此目标的编译器(copts 一样),还会传递给此目标的所有 objc_ 依赖项。遵循使变量替换和伯恩 shell 令牌化
enable_modules

Boolean; optional; default is False

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

List of strings; optional

要添加到此目标以及所有相关目标的 #include/#import 搜索路径的列表。 这是为了支持未在 #import/#include 语句中指定整个工作区路径的第三方库和开源库。

这些路径相对于软件包目录进行解释,除了实际的客户端根目录之外,还包含根文件和 bin 根目录(例如 blaze-genfiles/pkg/includedirblaze-out/pkg/includedir)。

COPTS 不同,这些标记是为此规则以及依赖于此规则的每条规则添加的。(注意:并非依赖于它的规则!)请格外小心,因为这可能会产生深远的影响。如有疑问,请改为为“COPTS”添加“-iquote”标记。

linkopts

List of strings; optional

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

Label; optional

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

String; optional

设置此目标的模块名称。默认情况下,模块名称是目标路径,所有特殊符号均替换为 _,例如 //foo/baz:bar 可作为 foo_baz_bar 导入。
non_arc_srcs

List of labels; optional

为创建不使用 ARC 的库目标而处理的 Objective-C 文件列表。 此属性中的文件的处理方式与 src 属性中的文件非常相似,但都是在未启用 ARC 的情况下编译的。
pch

Label; optional

要附加到正在编译的每个源文件(圆弧和非圆弧)前面的头文件。 我们不建议在 BUILD 文件中使用 pch 文件,这应被视为已废弃。由于 pch 文件实际上并未经过预编译,因此这并不是构建速度的增强功能,而只是全局性的依赖项。从构建效率的角度来看,实际上更好的是直接在需要的地方添加所需的资源。
sdk_dylibs

List of strings; optional

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

List of strings; optional

要关联的 SDK 框架的名称(例如“AddressBook”、“QuartzCore”)。在针对 iOS、tvOS 和 watchOS 平台进行构建时,始终包含“UIKit”和“Foundation”。对于 macOS,系统始终只包含“基础”版本。

关联顶级 Apple 二进制文件时,系统会列出该二进制文件的传递依赖项图中列出的所有 SDK 框架。

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 构建标志引用,以将 --xcode_version 标志转换为可接受的官方 Xcode 版本。这样就可以从多个注册的别名中选择官方 Xcode 版本。

参数

属性
name

Name; required

此目标的唯一名称。

default

Label; optional; nonconfigurable

要使用的默认 Xcode 官方版本。 如果未指定 xcode_version build 标志,系统会使用所提供的 xcode_version 目标指定的版本。如果设置了任何 versions,则必须提供此值。如果设置了 remote_versionslocal_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 build 标志会替换此处指定的值。
default_macos_sdk_version

String; optional; nonconfigurable

使用此版本的 Xcode 时默认使用的 macosx SDK 版本。macos_sdk_version build 标志会替换此处指定的值。
default_tvos_sdk_version

String; optional; nonconfigurable

使用此版本的 Xcode 时默认使用的 tvos SDK 版本。tvos_sdk_version build 标志会替换此处指定的值。
default_watchos_sdk_version

String; optional; nonconfigurable

使用此 xcode 版本时默认使用的 watchos SDK 版本。 watchos_sdk_version build 标志会替换此处指定的值。
version

String; required; nonconfigurable

Xcode 版本的官方版本号。