14

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

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

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

4

2 回答 2

7

现在可以为 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 的编译器。

于 2016-01-27T15:40:17.317 回答
5

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

于 2017-05-16T14:14:23.443 回答