swift - 生成错误 : missingLinuxMain

标签 swift linux

当我尝试在 linux 上构建 swift 包时出现错误:

> swift build -v
lsb_release -r
which clang
/opt/swift/usr/bin/swiftc --driver-mode=swift -L /opt/swift/usr/lib/swift/pm/4 -lPackageDescription -swift-version 4 -I /opt/swift/usr/lib/swift/pm/4 -sdk / /home/me/SwiftProject/Package.swift -fileno 5
/opt/swift/usr/bin/swiftc --driver-mode=swift -L /opt/swift/usr/lib/swift/pm/3 -lPackageDescription -swift-version 3 -I /opt/swift/usr/lib/swift/pm/3 -sdk / /home/me/SwiftProject/.build/checkouts/siesta-3156441904511450749/Package.swift -fileno 5
/opt/swift/usr/bin/swiftc --driver-mode=swift -L /opt/swift/usr/lib/swift/pm/3 -lPackageDescription -swift-version 3 -I /opt/swift/usr/lib/swift/pm/3 -sdk / /home/me/SwiftProject/.build/checkouts/SwiftyJSON-6376406316629445150/Package.swift -fileno 5
error: missingLinuxMain

我运行最后一条命令没有报错:

/opt/swift/usr/bin/swiftc --driver-mode=swift -L /opt/swift/usr/lib/swift/pm/3 -lPackageDescription -swift-version 3 -I /opt/swift/usr/lib/swift/pm/3 -sdk / /home/me/SwiftProject/.build/checkouts/SwiftyJSON-6376406316629445150/Package.swift -fileno 5

我在测试目录中有一个文件 LinuxMain.swift:

Tests
├── ProjectTests
│   ├── SomeTests.swift
└── LinuxMain.swift

LinuxMain.swift:

import XCTest
@testable import ProjectTests

XCTMain([
    testCase(SomeTests.allTests),
])

我在 ubuntu 17.04 上使用 swift 4.0

最佳答案

SwiftPM 使用名为 LinuxMain.swift 的文件(位于测试目标的根目录中,通常为 Tests/LinuxMain.swift)在 Linux 上查找单元测试. (在 Apple 平台上,它为此使用 Objective-C 运行时,但这在 Linux 上不可用。)

看起来你的构建失败了,因为 SwiftPM 找不到文件。

如果您还没有LinuxMain.swift 文件,您应该创建一个。查看它应该如何格式化的最简单方法可能是在空目录中运行 swift package init 并检查预期的目录和文件结构。

该文件应该看起来像这样,但适合您的包(我从 here 复制了这个):

import XCTest
@testable import MarathonTests

XCTMain([
     testCase(MarathonTests.allTests)
])

您的每个 XCTestCase 子类还需要一个 allTests 属性。同样,默认目录结构应该让您了解它的外观。

您可能还会找到 this article I wrote a few months ago有趣。

关于swift - 生成错误 : missingLinuxMain,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46693089/

相关文章:

ios - UITextField 子类,下方有栏 : bar not going all the way

ios - 用户通过swift在Apple In app purchase上购买某些商品时如何获取一些用户信息?

linux - "linux kernel is preemptive"是什么意思?

linux - HTTP header 和错误页面 - NGINX

swift - NSLog 不可用

ios - 如何在 Swift 3 和 URLRequest 上使用 httpMethod = POST?

linux - SuSE - 如何在重新启动后重新启动由用户通过键盘输入启动的 Linux 后台进程

php - 无法在php中打印特殊字符

c - 嵌入式 C : Different processes sending/receiving data to same input/output

ios - 如何在离开 View 时保存变量