Swift Library 插件提供了构建 Swift 库所需的任务和约定。特别是,Swift 库提供了可供使用者(即使用此插件或其他 Swift Application 插件 的项目)使用的功能。
用法
plugins {
`swift-library`
}
plugins {
id 'swift-library'
}
构建变体
Swift Library 插件理解以下维度。请阅读构建变体介绍以获取更多信息。
- 构建类型 - 始终设置为 debug 和 release
-
构建类型控制生成二进制文件的可调试性以及优化。
-
debug
- 生成调试符号且不优化二进制文件 -
release
- 生成调试符号并优化,但从二进制文件中提取调试符号
-
- 链接方式 - 默认为 shared
-
链接方式表示应该创建共享库还是静态库。库可以生成共享库、静态库或两者。
链接方式可按如下方式配置:
library {
linkage = listOf(Linkage.STATIC, Linkage.SHARED)
}
library {
linkage = [Linkage.STATIC, Linkage.SHARED]
}
- 目标机器 - 默认为构建主机
-
目标机器表示应用程序期望运行的机器。目标机器由其操作系统和架构标识。Gradle 使用目标机器根据主机上的可用性来决定选择哪个工具链。
目标机器可按如下方式配置:
library {
targetMachines = listOf(machines.linux.x86_64, machines.macOS.x86_64)
}
library {
targetMachines = [
machines.linux.x86_64,
machines.macOS.x86_64
]
}
任务
下图显示了此插件添加的任务之间的关系。
请注意,Swift 库的默认链接方式是共享链接,如图所示。

使用静态链接时,图变为如下所示:

变体相关任务
Swift Library 插件根据库组件的变体创建任务。请阅读构建变体介绍以获取更多信息。下图显示了变体相关任务之间的关系。

取决于链接属性 |
compileVariantSwift
(例如compileDebugSwift
和compileReleaseSwift
)- SwiftCompile-
依赖于:所有为编译贡献源文件的任务 :: 使用选定的编译器编译 Swift 源文件。
linkVariant
(例如linkDebug
和linkRelease
)- LinkSharedLibrary(共享链接)-
依赖于:所有为链接库贡献的任务,包括通过项目依赖项解析的项目中的
linkVariant
和createVariant
任务 :: 使用选定的链接器从编译的对象文件链接共享库。 createVariant
(例如createDebug
和createRelease
)- CreateStaticLibrary(静态链接)-
使用选定的归档器从编译的对象文件创建静态库
assembleVariant
(例如assembleDebug
和assembleRelease
)- 任务(生命周期)-
依赖于:
linkVariant
(共享链接)或createVariant
(静态链接):: 聚合构建此库特定变体的任务。
生命周期任务
Swift Library 插件将其部分任务附加到Base Plugin 章中记录的标准生命周期任务——Swift Library 插件会自动应用此插件。
assemble
- 任务(生命周期)-
依赖于:当链接方式包含
shared
时依赖于linkDebug
,否则依赖于createDebug
。:: 聚合任务,用于在项目中为当前主机(如果存在)构建共享库的 debug 变体(如果可用)。此任务由 Base Plugin 添加。 check
- 任务(生命周期)-
聚合任务,用于执行验证任务,例如运行测试。一些插件将其自身的验证任务添加到
check
中。例如,XCTest 插件将其测试任务附加到此生命周期任务。此任务由 Base Plugin 添加。 build
- 任务(生命周期)-
依赖于:
check
、assemble
:: 聚合任务,用于执行项目的完整构建。此任务由 Base Plugin 添加。 clean
- 删除-
删除构建目录及其中的所有内容,即由
layout.buildDirectory
项目属性指定的路径。此任务由 Base Plugin 添加。
依赖管理
与 Swift Library 插件创建的任务类似,会根据库组件的变体创建多个配置。请阅读构建变体介绍以获取更多信息。下图描述了 Swift Library 插件添加的配置。

-
白色框中的配置是用户应该用于声明依赖项的配置
-
粉色框中的配置(也称为可消费配置,标记为 (C))是组件编译、链接或运行时依赖于该库时使用的配置
-
蓝色框中的配置(也称为可解析配置,标记为 (R))是组件内部用于自身用途的配置
以下配置用于声明依赖项:
api
-
用于声明 API 依赖项(参见 API 与 implementation 部分)。您应在此处声明那些通过传递性方式导出给使用者用于编译和链接的依赖项。
implementation
扩展自api
-
用于声明主组件所有变体的 implementation 依赖项(参见 API 与 implementation 部分)。您应在此处声明那些纯粹是内部使用且不打算暴露给任何变体使用者的依赖项。
mainVariantImplementation
(例如mainDebugImplementation
和mainReleaseImplementation
)扩展自implementation
-
用于声明主组件特定变体的 implementation 依赖项(参见 API 与 implementation 部分)。您应在此处声明那些纯粹是内部使用且不打算暴露给此特定变体使用者的依赖项。
以下配置供使用者使用:
variantSwiftApiElements
(例如debugSwiftApiElements
和releaseSwiftApiElements
)扩展自mainVariantImplementation
-
用于针对该库进行编译。此配置旨在供使用者使用,以检索针对该库编译所需的所有元素。
variantLinkElements
(例如debugLinkElements
和releaseLinkElements
)扩展自mainVariantImplementation
-
用于针对该库进行链接。此配置旨在供使用者使用,以检索针对该库链接所需的所有元素。
variantRuntimeElements
(例如debugRuntimeElements
和releaseRuntimeElements
)扩展自mainVariantImplementation
-
用于执行该库。此配置旨在供使用者使用,以检索针对该库运行所需的所有元素。
以下配置供该库自身使用:
swiftCompileVariant
(例如swiftCompileDebug
和swiftCompileRelease
)扩展自mainVariantImplementation
-
用于编译该库。此配置包含该库的编译包含根目录,因此在调用 Swift 编译器编译它时使用。
nativeLinkVariant
(例如nativeLinkDebug
和nativeLinkRelease
)扩展自mainVariantImplementation
-
用于仅链接共享库。此配置包含该库的库文件,因此在调用 Swift 链接器链接它时使用。
nativeRuntimeVariant
(例如nativeRuntimeDebug
和nativeRuntimeRelease
)扩展自mainVariantImplementation
-
用于执行该库。此配置包含该库的运行时库文件。
API 与 implementation
此插件公开了两个可用于声明依赖项的配置:api
和 implementation
。api
配置应用于声明由库 API 导出的依赖项,而 implementation
配置应声明组件内部的依赖项。
library {
dependencies {
// FIXME: Put real deps here.
api("io.qt:core:5.1")
implementation("io.qt:network:5.1")
}
}
library {
dependencies {
// FIXME: Write better deps here.
api "io.qt:core:5.1"
implementation "io.qt:network:5.1"
}
}
出现在 api
配置中的依赖项将通过传递性方式暴露给该库的使用者,因此会出现在使用者的编译包含根目录和链接库中。另一方面,在 implementation
配置中找到的依赖项不会暴露给使用者,因此不会泄露到使用者的编译包含根目录和链接库中。这带来了几个好处:
-
依赖项不会泄露到使用者的编译包含根目录和链接库中,因此使用者永远不会意外地依赖于传递性依赖项
-
由于包含根目录和链接库减少,编译速度更快
-
当 implementation 依赖项更改时,重新编译次数更少,因为使用者无需重新编译
约定
Swift Library 插件为源文件和任务添加了约定,如下所示。
项目布局
Swift Library 插件假定项目布局如下所示。这些目录无需存在或包含任何内容。Swift Library 插件将编译找到的任何内容,并忽略任何缺失的部分。
src/main/swift
-
扩展名为
.swift
的 Swift 源文件
您可以通过配置 library
脚本块上的 source
来配置项目布局。
compileVariantSwift
任务
Swift Library 插件为要构建的库组件的每个变体添加一个 SwiftCompile 实例(例如 compileDebugSwift
和 compileReleaseSwift
)。请阅读构建变体介绍以获取更多信息。以下是一些最常见的配置选项:
compilerArgs(编译器参数) |
[] |
debuggable(可调试性) |
|
modules(模块) |
|
macros(宏) |
[] |
objectFileDir(对象文件目录) |
|
optimized(优化) |
debug 构建类型为 |
source(源文件) |
|
targetPlatform(目标平台) |
派生自二进制文件的 |
toolChain(工具链) |
linkVariant
任务
Swift Library 插件为包含 shared 链接方式作为维度的库的每个变体添加一个 LinkSharedLibrary 实例——例如 linkDebug
和 linkRelease
。请阅读构建变体介绍以获取更多信息。以下是一些最常见的配置选项:
debuggable(可调试性) |
|
libs(库) |
|
linkedFile(链接文件) |
|
linkerArgs(链接器参数) |
[] |
source(源文件) |
|
targetPlatform(目标平台) |
派生自二进制文件的 |
toolChain(工具链) |
createVariant
任务
Swift Library 插件为包含 static 链接方式作为维度的库的每个变体添加一个 CreateStaticLibrary 实例——例如 createDebug
和 createRelease
。请阅读构建变体介绍以获取更多信息。以下是一些最常见的配置选项:
outputFile(输出文件) |
|
source(源文件) |
|
staticLibArgs(静态库参数) |
[] |
targetPlatform(目标平台) |
派生自二进制文件的 |
toolChain(工具链) |