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 生成器 会在默认的 Swift 标志集中预置 -wmo 标志。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 中被移除。