如何使用SPM构建大小写区分的同名库与可执行文件?
解决SPM同时生成同名库与小写命令行程序的配置问题
首先修正你的Package.swift配置,核心问题在于可执行产品的targets列表错误地包含了库target,正确配置如下:
let package = Package( name: "Simulacra", products: [ // 可执行程序仅关联对应的executableTarget,无需包含库target .executable(name: "simulacra", targets: ["Simulacra-cmd"]), .library(name: "Simulacra", targets: ["Simulacra"]), ], dependencies: [], targets: [ .target( name: "Simulacra", dependencies: [], path: "Sources" ), .executableTarget( name: "Simulacra-cmd", dependencies: [ .target(name: "Simulacra") ], path: "cmd" ), .testTarget( name: "Simulacra-tests", dependencies: [ .target(name: "Simulacra") ], path: "Tests" ), ] )
问题根源说明
- 原配置中可执行产品同时指定了
Simulacra-cmd和Simulacra作为target,导致SPM与Xcode混淆两者角色,进而出现找不到库、错误尝试导入小写名称等问题。 - 你将库改名为
SimulacraCore后能正常运行,本质是规避了名称关联的冲突隐患,但这并非必要的妥协方案。
编译问题的解决
修正配置后,Xcode的以下问题会自动修复:
- 测试产物将正确生成到派生数据目录,而非项目根目录
- 不会再出现找不到
Simulacra库的错误 - 导入语句
import Simulacra可正常使用
内容的提问来源于stack exchange,提问作者drekka
相关产品推荐
相关产品推荐

