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 行为是为非调试配置将所有 Swift 目标以 wholemodule 模式构建。 Xcode 生成器在生成的 Xcode 项目文件中将 SWIFT_COMPILATION_MODE 属性设置为 wholemoduleNinja Generators 在默认的 Swift 标志集前添加 -wmo 标志。

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

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

注意

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