Objective-C 规则

报告问题 查看源代码 每夜版 · 8.4 · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

规则

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

名称;必需

相应目标的唯一名称。

deps

标签列表;默认值为 []

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

所有可通过 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 应用软件包中移除。
jre_deps

标签列表;默认值为 []

j2objc_library 规则翻译的所有 Java 代码所需的其他 JRE 模拟库的列表。默认情况下,仅链接核心 JRE 功能。

objc_import

查看规则来源
objc_import(name, deps, 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

名称;必需

相应目标的唯一名称。

deps

标签列表;默认值为 []

相应目标所依赖的目标列表。
hdrs

标签列表;默认值为 []

此库发布的 C、C++、Objective-C 和 Objective-C++ 头文件列表,供依赖规则中的来源包含。

这些头文件描述了库的公共接口,并且可供此规则或依赖规则中的来源包含。不应由相应库的客户端包含的标头应列在 srcs 属性中。

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

布尔值;默认值为 False

如果为 1,则任何直接或间接依赖于此库的软件包或二进制文件都会链接到 srcsnon_arc_srcs 中列出的文件的所有对象文件,即使某些对象文件不包含二进制文件引用的符号也是如此。如果您的代码未被二进制文件中的代码显式调用,例如,如果您的代码注册为接收由某些服务提供的回调,则此功能非常有用。
archives

标签列表;必需

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

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

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

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

COPTS 不同,这些标志会添加到相应规则以及依赖于该规则的每个规则中。(注意:不是它所依赖的规则!)请务必谨慎操作,因为这可能会产生深远的影响。如果不确定,请改为向 COPTS 添加“-iquote”标志。

sdk_dylibs

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

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

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

要关联的 SDK 框架的名称(例如“AddressBook”“QuartzCore”)。为 iOS、tvOS、visionOS 和 watchOS 平台构建时,始终会包含“UIKit”和“Foundation”。对于 macOS,始终只包含“Foundation”。

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

sdk_includes

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

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

标签列表;默认值为 []

此规则中的源文件或此库的用户作为头文件包含的 C、C++、Objective-C 和 Objective-C++ 文件列表。与 hdrs 不同,这些文件不会与来源分开编译。
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, 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

名称;必需

相应目标的唯一名称。

deps

标签列表;默认值为 []

链接在一起以形成最终软件包的目标列表。
srcs

标签列表;默认值为 []

要处理以创建库目标的 C、C++、Objective-C 和 Objective-C++ 源文件和头文件,以及/或者 (`.s`、`.S` 或 `.asm`) 汇编源文件的列表。 这些是您已签入的文件,以及所有生成的文件。 源文件使用 Clang 编译为 .o 文件。此目标的 srcs 属性中的任何源或头文件都可以包含/导入头文件,但 hdrs 中的头文件或依赖于此规则的任何目标不可以。 此外,还可以将预编译的 .o 文件作为 srcs 提供。请务必确保所提供的 .o 文件的架构与 build 的架构保持一致,以避免出现符号链接器错误。
hdrs

标签列表;默认值为 []

此库发布的 C、C++、Objective-C 和 Objective-C++ 头文件列表,供依赖规则中的来源包含。

这些头文件描述了库的公共接口,并且可供此规则或依赖规则中的来源包含。不应由相应库的客户端包含的标头应列在 srcs 属性中。

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

布尔值;默认值为 False

如果为 1,则任何直接或间接依赖于此库的软件包或二进制文件都会链接到 srcsnon_arc_srcs 中列出的文件的所有对象文件,即使某些对象文件不包含二进制文件引用的符号也是如此。如果您的代码未被二进制文件中的代码显式调用,例如,如果您的代码注册为接收由某些服务提供的回调,则此功能非常有用。
copts

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

要传递给编译器的额外标志。 受“创建变量”替换和 Bourne shell 令牌化的影响。 这些标志仅适用于此目标,而不适用于依赖于此目标的目标或此目标所依赖的目标。

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

defines

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

要传递给编译器的额外 -D 标志。它们应采用 KEY=VALUEKEY 形式,不仅会传递给相应目标的编译器(与 copts 相同),还会传递给相应目标的所有 objc_ 依赖项。 受“创建变量”替换和 Bourne shell 令牌化的影响。
enable_modules

布尔值;默认值为 False

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

标签列表;默认值为 []

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

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

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

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

COPTS 不同,这些标志会添加到相应规则以及依赖于该规则的每个规则中。(注意:不是它所依赖的规则!)请务必谨慎操作,因为这可能会产生深远的影响。如果不确定,请改为向 COPTS 添加“-iquote”标志。

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 文件实际上并未预编译,因此这并不能提高构建速度,而只是一个全局依赖项。从 build 效率的角度来看,您最好直接在需要的位置将所需内容纳入到源代码中。
sdk_dylibs

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

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

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

要关联的 SDK 框架的名称(例如“AddressBook”“QuartzCore”)。为 iOS、tvOS、visionOS 和 watchOS 平台构建时,始终会包含“UIKit”和“Foundation”。对于 macOS,始终只包含“Foundation”。

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

sdk_includes

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

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

标签列表;默认值为 []

此规则中的源文件或此库的用户作为头文件包含的 C、C++、Objective-C 和 Objective-C++ 文件列表。与 hdrs 不同,这些文件不会与来源分开编译。
weak_sdk_frameworks

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

要弱链接的 SDK 框架的名称。例如,“MediaAccessibility”。 与常规关联的 SDK 框架不同,如果弱关联的框架中的符号在运行时不存在,则不会导致错误。

available_xcodes

查看规则来源
available_xcodes(name, default, deprecation, distribs, features, licenses, tags, testonly, versions, visibility)

xcode_config 规则实例可以依赖此规则的两个目标,以指示远程和本地可用的 Xcode 版本。这样就可以从所有可用的 Xcode 中选择一个正式版 Xcode。

参数

属性
name

名称;必需

相应目标的唯一名称。

default

标签不可配置;必需

相应平台的默认 Xcode 版本。
versions

标签列表;不可配置;默认值为 []

相应平台上可用的 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

名称;必需

相应目标的唯一名称。

default

标签不可配置;默认值为 None

要使用的默认官方 Xcode 版本。 如果未指定 xcode_version build 标志,则使用所提供的 xcode_version 目标指定的版本。如果设置了任何 versions,则此字段为必填字段。如果设置了 remote_versionslocal_versions,则不得设置此值。
local_versions

标签不可配置;默认值为 None

本地可用的 xcode_version 目标。 这些与 local_versions 一起使用,用于选择相互可用的版本。如果设置了 versions,则可能不会设置此字段。
remote_versions

标签不可配置;默认值为 None

可远程使用的 xcode_version 目标。 这些与 remote_versions 一起使用,用于选择相互可用的版本。如果设置了 versions,则可能不会设置此字段。
versions

标签列表;不可配置;默认值为 []

可使用的已接受的 xcode_version 目标。 如果 xcode_version build 标志的值与任何指定 xcode_version 目标的别名或版本号匹配,则将使用匹配的目标。如果设置了 remote_versionslocal_versions,则不得设置此值。

xcode_version

查看规则来源
xcode_version(name, default_ios_sdk_version, default_macos_sdk_version, default_tvos_sdk_version, default_visionos_sdk_version, default_watchos_sdk_version, deprecation, distribs, features, licenses, tags, testonly, version, visibility)

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

参数

属性
name

名称;必需

相应目标的唯一名称。

default_ios_sdk_version

字符串;不可配置;默认值为 ""

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

字符串;不可配置;默认值为 ""

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

字符串;不可配置;默认值为 ""

使用此版本的 Xcode 时默认使用的 tvos sdk 版本。 tvos_sdk_version build 标志将替换此处指定的值。
default_visionos_sdk_version

字符串;不可配置;默认值为 ""

使用此版本的 Xcode 时默认使用的 visionos SDK 版本。 visionos_sdk_version build 标志将替换此处指定的值。
default_watchos_sdk_version

字符串;不可配置;默认值为 ""

使用此版本的 Xcode 时默认使用的 watchos sdk 版本。 watchos_sdk_version build 标志将替换此处指定的值。
version

字符串;不可配置;必需

Xcode 版本的正式版本号。