【问题标题】:Swift on OS X compiling for Linux?Swift 在 OS X 上为 Linux 编译?
【发布时间】:2016-05-04 15:32:51
【问题描述】:

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

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

我看了documentation,但是这个话题还不是很清楚……

【问题讨论】:

  • 我构建了一个 docker 容器来帮助构建过程。您可以安装 docker,启动 docker-cli,cd 进入您的项目目录并发出此命令“docker run -it -v $(PWD):/swiftsource saltzmanjoelh/swiftubuntu /bin/bash”。这将启动 Linux 容器,让您在 linux 上构建 Swift。容器启动后,只需“cd /swiftsource && swift build”

标签: linux swift macos report tps


【解决方案1】:

Swift 包管理器通过以下方式获得自定义工具链支持 PR-1098 2017 年 4 月下旬。

这允许您设置交叉编译器工具链(macOS 到 Ubuntu,甚至相反)。 SwiftPM 存储库包含一个 example script,它设置了一个 Intel-macOS => Intel-Ubuntu 工具链。

正如 Eric 所说,您当然只能使用目标平台上可用的框架。但是,是的,您现在可以在 macOS 上构建 Linux Swift 项目。 (正如 joels 在评论中提到的,你也可以很容易地通过 Docker 做到这一点)

相关:(Cross-)Compiling Swift for Raspberry PI

2021 年 10 月 19 日更新:有现成的交叉编译器可用作 Homebrew 水龙头:SPMDestinations

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2011-05-19
      • 2010-10-16
      • 1970-01-01
      • 1970-01-01
      • 2016-11-04
      • 1970-01-01
      相关资源
      最近更新 更多