Objective-C 规则

规则

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 语句中指定整个工作区路径。

路径是相对于软件包目录进行解释的,除了实际的客户端根目录之外,还包括 genfiles 和 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++ 文件列表。与 hdrs 不同,这些文件不会与来源分开编译。
weak_sdk_frameworks

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

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

objc_library

查看规则源代码
objc_library(name, deps, srcs, data, hdrs, alwayslink, compatible_with, conlyopts, copts, cxxopts, 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 属性中的任何来源或标头都可以包含/导入标头文件,但 hdrs 中的标头或依赖于此规则的任何目标都不能包含/导入标头文件。 此外,还可以将预编译的 .o 文件作为 srcs 提供。 请注意确保提供的 .o 文件的架构与构建的架构一致,以避免出现缺少符号链接器错误。
hdrs

标签列表;默认值为 []

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

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

如果启用了模块,这些标头将与来源分开编译。

布尔值;默认值为 False

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

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

要传递给 C 文件编译器的额外标志。 受 "Make 变量" 替换和 Bourne shell 标记化的影响。 这些标志仅适用于此目标,而不适用于它所依赖的目标或依赖于它的目标。

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

copts

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

要传递给编译器的额外标志。 受 "Make 变量" 替换和 Bourne shell 标记化的影响。 这些标志仅适用于此目标,而不适用于它所依赖的目标或依赖于它的目标。

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

cxxopts

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

要传递给 Objective-C++ 和 C++ 文件编译器的额外标志。 受 "Make 变量" 替换和 Bourne shell 标记化的影响。 这些标志仅适用于此目标,而不适用于它所依赖的目标或依赖于它的目标。

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

defines

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

要传递给编译器的额外 -D 标志。它们应采用 KEY=VALUE 或仅 KEY 的形式,不仅会传递给此目标的编译器(如 copts),还会传递给此目标的所有 objc_ 依赖项。受 "Make 变量" 替换和 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 语句中指定整个工作区路径。

路径是相对于软件包目录进行解释的,除了实际的客户端根目录之外,还包括 genfiles 和 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++ 文件列表。与 hdrs 不同,这些文件不会与来源分开编译。
weak_sdk_frameworks

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

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