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 变量进行初始化。

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

注意

一旦策略在项目顶层生效,则必须在整个树中使用该选择。在子目录中包含嵌套项目的项目中,请务必将所有内容一起转换。

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

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

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

注意

策略的 OLD 行为 按定义已弃用,并可能在未来的 CMake 版本中移除。