是否可以将Swift包从库更改为可执行文件?

w7t8yxp5  于 2023-03-17  发布在  Swift
关注(0)|答案(1)|浏览(248)

我想编写一个小的命令行工具作为一个快速包,但可执行。在开始时,我做了一个包与以下命令。

swift package init

现在,当我完成我的工作后,我意识到,这个命令确实创建了一个库,而不是一个可执行文件。现在我的问题是:有没有一种方法可以在Package.swift清单的帮助下改变这一点?
我已经尝试将Package.swift更改为可执行文件:

import PackageDescription

let package = Package(
    name: "lookupTool",
    products: [
        // Products define the executables and libraries a package produces, and make them visible to other packages.
        .executable( // <---- Here changed to executable
            name: "lookupTool",
            targets: ["lookupTool"]),
    ],
    dependencies: [
        // Dependencies declare other packages that this package depends on.
        // .package(url: /* package url */, from: "1.0.0"),
    ],
    targets: [
        // Targets are the basic building blocks of a package. A target can define a module or a test suite.
        // Targets can depend on other targets in this package, and on products in packages this package depends on.
        .executableTarget( // <---- Here to executableTarget
            name: "lookupTool",
            dependencies: [],
                exclude: ["test.txt", "test2.txt", "test3.txt"]),
        .testTarget(
            name: "lookupToolTests",
            dependencies: ["lookupTool"]),
    ]
)

但它不起作用。
我无法将lookupTool作为可执行文件在可执行文件所在的./build/debug文件夹中运行。如果我键入命令ls,可执行文件就在那里。

nqwrtyyt

nqwrtyyt1#

要运行可执行文件,有几个选项。如果它已经生成,您可以直接运行它。在包目录中,您可以键入

.build/debug/lookupTool

或者,您可以cd到目录并运行

./lookupTool

这是Sweeper建议的解决方案。您需要添加目录路径(即使./是目录路径)的原因是build/debug.都不会出现在您的$PATH变量中。顺便说一句,永远不要将.放入您的$PATH变量中。这是一个非常容易的漏洞。
运行可执行文件的另一种方法是(从软件包目录)

swift run lookupTool

这样做的好处是在运行产品之前构建它。因此,它很适合作为构建测试周期的一部分。您还可以键入

swift run -c release lookupTool

这将构建并运行工具的优化发布版本。后者与构建发布目标并键入.build/release/lookupTool相同

相关问题