CMP0157

从 3.29 版本起添加。

Swift 编译模式由一个抽象方法选择。

Swift 编译器可以用不同的模式编译模块。所需的构建模式取决于开发者是进行迭代并希望逐步进行更改,还是正在构建一个要分发的版本并希望对生成的可执行文件应用更多优化。

当在非调试构建类型中配置时,CMake 3.26 到 3.28 版本在启用整包优化的情况下构建 Swift 二进制文件。对于早于 3.26 的 CMake 版本,开发者需要手动为 Ninja 生成器 指定必需的标志,并且无法向 Xcode 生成器指定整包优化。

CMake 3.29 及更高版本更倾向于使用 Swift_COMPILATION_MODE 目标属性来设置编译模式,该属性可由 CMAKE_Swift_COMPILATION_MODE 变量初始化。

此策略为尚未更新的项目提供兼容性。策略设置在第一个 project()enable_language() 命令(该命令启用 Swift 语言)生效时起作用。

注意

此策略在项目最顶部生效后,必须在整个树中使用此选择。对于在子目录中嵌套了项目的项目,请务必一起转换所有内容。

与此策略相关的 OLD 行为是针对非调试配置以 wholemodule 模式构建所有 Swift 目标。 Ninja 生成器-wmo 标志添加到 Swift 标志的默认集中。 Xcode 生成器将 SWIFT_COMPILATION_MODE 属性设置为生成的 Xcode 项目文件中的 wholemodule

此策略的 NEW 行为是应用 Swift_COMPILATION_MODE 目标属性中指定的编译模式,目标属性在每个目标由 CMAKE_Swift_COMPILATION_MODE 变量创建时初始化。

此策略在 CMake 版本 3.29 中引入。它可以通过 cmake_policy()cmake_minimum_required() 来设置。如果未设置,CMake 不会 发出警告,并且使用 OLD 行为。

注意

策略的 OLD 行为(deprecated by definition)可能会在将来的 CMake 版本中移除。