在 OS X 上编译 Swift 以适用于 Linux?

16

我对Swift在其他平台上的构建过程感到困惑。

Swift是否允许我在OS X上构建Linux项目,还是我需要在Linux上专门使用Swift来构建我计划在那里使用的任何东西?

我查看了文档,但在这个主题上并不是很清楚...


我建立了一个 Docker 容器来辅助构建过程。您可以安装 Docker,启动 Docker-cli,进入项目目录并执行以下命令 “docker run -it -v $(PWD):/swiftsource saltzmanjoelh/swiftubuntu /bin/bash”。这将启动 Linux 容器以便在 Linux 平台上构建 Swift。容器一旦启动,只需运行 "cd /swiftsource && swift build" 即可。 - joels
2个回答

10
一个不导入任何框架的纯Swift应用现在可以编译为iOS、OS X和Linux版本。由于是不同的平台,因此会生成不同的可执行文件,但源代码可以相同,只需为相应的平台进行编译。当您导入框架时,差异就出现了。如果您导入UIKit以制作iOS应用程序,则显然无法在Linux上编译此应用程序,因为Linux没有这些iOS UIKit库,它们仅通过Xcode在Mac上可用。如果您导入Cocoa以制作OS X应用程序,则适用相同的逻辑,它仅适用于OS X。同样地,如果您导入特定的Linux库(如Glibc),则可以制作仅在Linux上运行的Swift代码,但这些库在Mac上无法工作。需要记住的是,编写应用程序与编程语言本身并不那么相关,而是取决于您链接的框架和库。不同的Swift版本配备有不同的编译器(实际上是不同的工具链),因此直接回答,不能使用普通的OS X Swift编译器编译Linux Swift,必须使用Swift.org的编译器。

6

Swift Package Manager于2017年4月底通过PR-1098获得了自定义工具链支持。

这使您可以设置交叉编译工具链(从macOS到Ubuntu,甚至反过来)。SwiftPM存储库包含一个示例脚本,它设置了一个Intel-macOS => Intel-Ubuntu工具链。

正如Eric所说,您当然只能使用目标平台上可用的框架。但是,是的,您现在可以在macOS上构建Linux Swift项目。(正如joels在评论中提到的那样,您也可以通过Docker非常容易地完成这项工作)

相关:为Raspberry PI(跨平台)编译Swift

更新2021-10-19:Homebrew tap提供了现成的交叉编译器:SPMDestinations


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接