Swift包管理器条件编译不尊重标志

时间:2016-10-15 21:05:13

标签: swift-package-manager

我有一个包含以下结构的Package.swift文件

var package = Package(
  name: "MyProject",
  targets: [
    Target(name: "MyProject")
  ],
  dependencies: [],
  exclude: ["Exclude"]
)

#if DEBUG
  package.dependencies.append(Package.Dependency.Package(url: "Dependency-One.git", majorVersion: 0, minor: 0))
#else
  package.dependencies.append(Package.Dependency.Package(url: "Dependency-Two.git", majorVersion: 0, minor: 0))
#endif

当我使用以下任何一个构建它时:

swift build
swift build -c release
swift build -c debug
swift build -c RELEASE
swift build -c DEBUG

它仍然总是下载Dependency-Two.git。如果我在

之前添加上述所有内容,则仍然如此
rm -rf .build/ && rm -rf Packages/

所以我不这么认为,因为它重用了一些缓存。是否可以做我打算在这里做的事情?

2 个答案:

答案 0 :(得分:2)

仍然不可用。我的解决方法是创建多个 Package.swift 文件,命名为 Package-DEBUG.swift 并让脚本在构建时将相应的文件复制到 Package.swift

这是一种非常愚蠢的解决方法,SPM 开发人员确实需要实施命令行标志。

答案 1 :(得分:1)

这是设计的。清单不是用于以这种方式声明条件行为,但遗憾的是,您正在尝试执行此 支持的机制(例如,包括来自{{的其他API) 1}}在每个配置中声明你想要的东西)还没有设计。

我建议您在https://bugs.swift.org上提交此功能的增强请求。