CMP0157¶
在版本 3.29 中添加。
Swift 编译模式通过抽象进行选择。
Swift 编译器可以以不同的模式编译模块。所需的构建模式取决于开发者是正在进行增量更改的迭代,还是正在构建用于发行的版本并希望对生成的二进制文件应用更多优化。
CMake 版本 3.26 至 3.28 在配置为非调试构建类型时,会启用整模块优化来构建 Swift 二进制文件。对于早于 3.26 的 CMake 版本,开发者需要为 Ninja Generators 手动指定必要的标志,并且无法为 Xcode 生成器指定整模块优化。
CMake 版本 3.29 及更高版本倾向于使用 Swift_COMPILATION_MODE 目标属性来设置编译模式,该属性可以由 CMAKE_Swift_COMPILATION_MODE 变量进行初始化。
此策略为未更新的项目提供兼容性。策略设置从第一个启用 Swift 语言的 project() 或 enable_language() 命令开始生效。
注意
一旦策略在项目顶部生效,就必须在整个树中使用该选择。在包含嵌套项目的项目中,请确保一起转换所有内容。
此策略的 OLD 行为是在非调试配置下以 wholemodule 模式构建所有 Swift 目标。 Ninja Generators 将 -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 版本中被移除。