Objective-C 规则

报告问题 每晚

规则

j2objc_library

查看规则来源
j2objc_library(name, deps, compatible_with, deprecation, distribs, entry_classes, exec_compatible_with, exec_properties, features, jre_deps, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)

此规则使用 J2ObjC 将 Java 源文件转换为 Objective-C,然后可将其用作 objc_library 和 objc_binary 规则的依赖项。如需详细了解 J2ObjC 本身,请访问 J2ObjC 网站

您可以在命令行中使用 build 标志 --j2objc_translation_flags 指定自定义 J2ObjC 转译标志。

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

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

参数

属性
name

名称(必需)

此目标的唯一名称。

deps

标签列表;默认值为 []

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,系统将生成相应的 .h 和 .m 源文件以及该 jar 的所有代码。

用户可以在其代码中导入 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

字符串列表;默认值为 []

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

标签列表;默认值为 []

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

objc_import

查看规则来源
objc_import(name, deps, hdrs, alwayslink, archives, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, includes, restricted_to, sdk_dylibs, sdk_frameworks, sdk_includes, tags, target_compatible_with, testonly, textual_hdrs, toolchains, visibility, weak_sdk_frameworks)

此规则以 .a 文件的形式封装已编译的静态库。它还允许使用 objc_library 支持的相同属性导出头文件和资源。

参数

属性
name

名称(必需)

此目标的唯一名称。

deps

标签列表;默认值为 []

此目标所依赖的目标的列表。
hdrs

标签列表;默认值为 []

此库发布的 C、C++、Objective-C 和 Objective-C++ 头文件的列表,这些文件将包含在源规则中。

这些头文件描述库的公共接口,并可供来源添加到此规则或依赖规则中。不应纳入此库的客户端的标头应改为列在 srcs 属性中。

如果启用了模块,这些模块将与源代码文件分开编译。

布尔值;默认值为 False

如果为 1,则(直接或间接)依赖于此库的任何软件包或二进制文件都将链接到 srcsnon_arc_srcs 中列出的文件的所有对象文件中,即使其中一些文件不包含二进制文件引用的符号也是如此。如果您的代码没有被二进制文件中的代码明确调用(例如,您的代码注册以接收某项服务提供的某种回调),那么该方法会非常有用。
archives

标签列表(必需)

提供给依赖于此目标的 Objective-C 目标的 .a 文件列表。
includes

字符串列表;默认值为 []

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

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

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

sdk_dylibs

字符串列表;默认值为 []

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

字符串列表;默认值为 []

要关联的 SDK 框架的名称(例如“AddressBook”、“QuartzCore”)。

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

sdk_includes

字符串列表;默认值为 []

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

标签列表;默认值为 []

由此规则中的源文件或此库的用户作为头文件添加的 C、C++、Objective-C 和 Objective-C++ 文件的列表。与 HDR 不同,它们不会与源代码分开编译。
weak_sdk_frameworks

字符串列表;默认值为 []

要与之建立弱关联的 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, implementation_deps, includes, linkopts, module_map, module_name, non_arc_srcs, pch, restricted_to, sdk_dylibs, sdk_frameworks, sdk_includes, stamp, tags, target_compatible_with, testonly, textual_hdrs, toolchains, visibility, weak_sdk_frameworks)

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

参数

属性
name

名称(必需)

此目标的唯一名称。

deps

标签列表;默认值为 []

此目标所依赖的目标的列表。
srcs

标签列表;默认值为 []

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

标签列表;默认值为 []

此库发布的 C、C++、Objective-C 和 Objective-C++ 头文件的列表,这些文件将包含在源规则中。

这些头文件描述库的公共接口,并可供来源添加到此规则或依赖规则中。不应纳入此库的客户端的标头应改为列在 srcs 属性中。

如果启用了模块,这些模块将与源代码文件分开编译。

布尔值;默认值为 False

如果为 1,则(直接或间接)依赖于此库的任何软件包或二进制文件都将链接到 srcsnon_arc_srcs 中列出的文件的所有对象文件中,即使其中一些文件不包含二进制文件引用的符号也是如此。如果您的代码没有被二进制文件中的代码明确调用(例如,您的代码注册以接收某项服务提供的某种回调),那么该方法会非常有用。
copts

字符串列表;默认值为 []

要传递给编译器的额外标志。 取决于使用 "Make variable" 替换和 Bourne shell 令牌化。这些标志将仅应用于此目标,而不适用于此目标所依赖或依赖于此目标的对象。

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

defines

字符串列表;默认值为 []

要传递给编译器的额外 -D 标志。它们应采用 KEY=VALUE 格式或直接采用 KEY 格式,并且不仅会传递到此目标的编译器(与 copts 一样),还会传递到此目标的所有 objc_ 依赖项。 取决于使用 "Make variable" 替换和 Bourne shell 令牌化
enable_modules

布尔值;默认值为 False

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

标签列表;默认值为 []

库目标所依赖的其他库的列表。与 deps 不同,这些库(及其所有传递依赖项)的头文件和 include 路径仅用于此库的编译,而不会用于依赖于此库的库。使用 implementation_deps 指定的库仍会链接到依赖于此库的二进制文件目标中。
includes

字符串列表;默认值为 []

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

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

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

linkopts

字符串列表;默认值为 []

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

标签;默认值为 None

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

字符串;默认值为 ""

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

标签列表;默认值为 []

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

标签;默认值为 None

用于附加到正在编译的每个源文件(包括 arc 和非 arc)的头文件。不建议在 BUILD 文件中使用 pch 文件,应将其视为已废弃。由于 pch 文件实际上并不是预编译的,因此这并不是构建速度的增强功能,而只是一个全局依赖项。从构建效率的角度来看,您实际上最好是直接在源代码中在需要时添加所需的内容。
sdk_dylibs

字符串列表;默认值为 []

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

字符串列表;默认值为 []

要关联的 SDK 框架的名称(例如“AddressBook”、“QuartzCore”)。

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

sdk_includes

字符串列表;默认值为 []

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

布尔值;默认值为 False

textual_hdrs

标签列表;默认值为 []

由此规则中的源文件或此库的用户作为头文件添加的 C、C++、Objective-C 和 Objective-C++ 文件的列表。与 HDR 不同,它们不会与源代码分开编译。
weak_sdk_frameworks

字符串列表;默认值为 []

要与之建立弱关联的 SDK 框架的名称。例如,“MediaAccessibility”。 与定期关联的 SDK 框架不同,如果在运行时不存在,来自弱关联框架的符号不会导致错误。