我对 Swift 在其他平台上的构建过程感到困惑。
Swift 是否允许我在 OS X 上构建 Linux 项目,还是我需要专门在 Linux 上使用 Swift 来构建我计划在那里使用的任何东西?
我查看了文档,但关于这个主题并不是很清楚......
现在可以为 iOS、OS X 和 Linux 编译一个不导入任何框架的纯 Swift 应用程序。
您将生成不同的可执行文件,因为它是不同的平台,但代码源可以相同,只需针对各自的平台进行编译。
不同之处在于您何时导入框架。
如果您导入 UIKit 来制作 iOS 应用程序,显然您将无法在 Linux 上编译它,因为 Linux 没有那些 iOS UIKit 库,它们只能通过 Xcode 在 Mac 上使用。
如果你导入 Cocoa 来制作一个 OS X 应用程序,同样的逻辑也适用,它只适用于 OS X。
同样,如果您导入了在 Mac 上无法运行的特定 Linux 库(如 Glibc),您可以制作仅适用于 Linux 的 Swift 代码。
等等等等。
您需要记住的是,在为平台制作应用程序时,编程语言并不是那么重要,而是您链接到的框架和库是决定性的。
不同的 Swift 版本带有不同的编译器(实际上是不同的工具链),所以直接回答,不,你不能用普通的 OS X Swift 编译器为 Linux Swift 编译,你必须使用 Swift.org 的编译器。
Swift 包管理器通过2017 年 4 月结束的PR-1098获得了自定义工具链支持 。
这允许您设置交叉编译器工具链(macOS 到 Ubuntu,甚至相反)。SwiftPM 存储库包含一个示例脚本,用于设置 Intel-macOS => Intel-Ubuntu 工具链。
正如 Eric 所说,您当然只能使用目标平台上可用的框架。但是,是的,您现在可以在 macOS 上构建 Linux Swift 项目。(正如 joels 在评论中提到的,你也可以很容易地通过 Docker 做到这一点)
相关:(交叉)为 Raspberry PI 编译 Swift
2021 年 10 月 19 日更新:有现成的交叉编译器可用作 Homebrew 水龙头:SPMDestinations