当我尝试在 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/