gpt4 book ai didi

swift - 如何使用 swiftc 创建可导入的 Swift 库

转载 作者:行者123 更新时间:2023-11-28 14:21:17 28 4
gpt4 key购买 nike

想知道如何创建一个库以便我可以这样做:

// in MyProject/main.swift
import MyLibrary

let x = MyLibrary("foo")
...

目前我正在编译一个像这样的 swift 文件:

swiftc main.swift

我也有一个 Package.swift,所以它最终会在 ./main 生成一个 main 文件。

想知道如何在本地执行此操作,所以我可以构建一个本地模块/库 MyLibrary,并在另一个项目 MyProject 中本地使用它。

最佳答案

我建议切换到 Swift Package Manager如果您只打算在 macOS 或 Linux 上提供此库。目前,SPM 仅适用于 macOS 和 Linux,不适用于 iOS/tvOS/watchOS。但是,它使库分发变得更加容易。

要将您的库转换为 Swift 包管理器,其源文件需要位于以下目录结构中:

MyLibrary-package
├── Sources
│ └── MyLibrary
│ ├── File1.swift
│ └── File2.swift
├── Tests
│ └── MyLibraryTests
│ └── MyLibraryTests.swift
└── Package.swift

顶层文件夹可以随意命名,但是 SourcesTests 文件夹应该保留它们的名字。在我有 MyLibrary 的地方,您可以输入您的包的名称,但它必须与您的 Package.swift 中的目标名称相匹配。此外,无论您将 MyLibraryTests 替换为什么,都必须与 Package.swift 中的测试目标名称相匹配。

您应该将所有源文件放在 MyLibrary 目录(或任何您重命名的目录)中。

这是一个示例 Package.swift 文件,我认为它会匹配您的项目设置。

// swift-tools-version:4.0

import PackageDescription

let package = Package(
name: "MyLibrary",
products: [
.library(name: "MyLibrary", targets: ["MyLibrary"]),
],
targets: [
.target(name: "MyLibrary", dependencies: []),
.testTarget(name: "MyLibraryTests", dependencies: ["MyLibrary"]),
]
)

一旦您移动了源文件并更改了您的 Package.swift,您就可以运行 swift build。您的库应该构建在 .build 文件夹(将被创建)中的某处。它因计算机而异,但我的是 .build/x86_64-apple-macosx10.10/debug/MyLibrary.build/

如果你特别想要一个静态库,改变这一行:

.library(name: "MyLibrary", targets: ["MyLibrary"]),

为此:

.library(name: "MyLibrary", type: .static, targets: ["MyLibrary"]),

关于swift - 如何使用 swiftc 创建可导入的 Swift 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51917118/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com