SwfitPM 全称是 Swift Package Manager ,是 Swift 的包管理工具。
SwiftPM 的 manifest 文件是 Package.swift
,在编译源码之前需要先编译这个 manifest 文件,然后再执行它进行源码构建。
SwiftPM 的编译命令是 swift build
,默认情况下是编译 debug 模式,release 模式需要增加参数:swift build -c release
。
要对 manifest 文件的增加编译参数,命令是:swift build -Xmanifest -use-ld=lld
。
Swift 源文件是使用 swiftc
进行编译,要进行一些额外优化的话,需要 -Xswiftc ${argmuent}
来传递参数。
例如 swiftc -static-stdlib -Xfrontend -enable-copy-propagation
在 SwiftPM 中要这样传递:
swift build -c release \
-Xswiftc -static-stdlib \
-Xswiftc -Xfrontend \
-Xswiftc -enable-copy-propagation
传递给 swiftc
的每个参数都要用 -Xswiftc
来分隔,并且参数的顺序要和原来一样。
在 Linux 系统上,如果要使用 LLVM 的 lld
作为链接器,因为 SwiftPM 没有传递全局参数的方法,所以需要这样传递参数:
swift build -c release \
-Xmanifest -use-ld=lld \
-Xswiftc -use-ld=lld \
-Xswiftc -static-stdlib \
-Xswiftc -Xfrontend \
-Xswiftc -enable-copy-propagation
也可以把参数写在一个 json 文件里,这样可以增强可读性和可维护性:swift build --destination /path/to/your/config.json
具体的例子参考官方的:https://github.com/apple/swift-package-manager/blob/main/Utilities/build_ubuntu_cross_compilation_toolchain
因为 SwiftPM 是支持多平台的,在每个平台上默认输出的路径不一样,如果想知道构建后的输出目录,需要使用参数 --show-bin-path
:
swift build -c release --show-bin-path
参考资料
https://github.com/apple/swift-package-manager/blob/main/Documentation/Usage.md#additional-flags