如何编译SwiftPackage的swift-graphql可执行二进制产物?
如何单独构建Swift包中的指定CLI可执行文件
问题场景
我有一个导出CLI可执行产物的Swift库,希望将swift-graphql CLI二进制文件作为Git发布资产以简化安装,但构建包时遇到困难。我的Package.swift配置已正确声明了可执行产物:
let package = Package( name: "swift-graphql", platforms: [...], products: [ // SwiftGraphQL .library(name: "SwiftGraphQL", targets: ["SwiftGraphQL"]), .library(name: "SwiftGraphQLClient", targets: ["SwiftGraphQLClient"]), .library(name: "SwiftGraphQLCodegen", targets: ["SwiftGraphQLCodegen"]), // CLI .executable( name: "swift-graphql", targets: ["SwiftGraphQLCLI"]), ], dependencies: [...], targets: [...] )
尝试swift build -c release后会生成所有包产物,难以单独提取目标CLI二进制;swift build -c release --show-bin-path返回的是包含所有产物的文件夹,无法直接得到仅SwiftGraphQLCLI对应的可执行文件。
解决方案
1. 精准构建指定可执行产物
使用swift build的--product参数指定仅构建目标CLI产物,命令如下:
swift build -c release --product swift-graphql
执行完成后,swift-graphql可执行文件会位于--show-bin-path返回的目录下,你可以直接从该目录提取这个二进制文件。
2. 一键导出到指定路径(可选)
如果希望直接将二进制文件复制到当前工作目录或自定义路径,可结合--show-bin-path和cp命令:
cp "$(swift build -c release --product swift-graphql --show-bin-path)/swift-graphql" ./
执行后,当前目录会直接生成独立的swift-graphql可执行文件,方便作为Git发布资产上传。
说明
默认swift build会构建包内所有声明的产物(包括所有库和可执行文件),而--product参数可以精准定位到你需要的可执行目标,避免生成多余文件,简化后续的二进制提取流程。
内容的提问来源于stack exchange,提问作者maticzav
相关产品推荐
相关产品推荐

