CMP0149¶
在 3.27 版本中新增。
Visual Studio Generators 默认选择最新的 Windows SDK。
Visual Studio Generators 会选择一个 Windows SDK 版本,并将其放入 .vcxproj 文件中的 WindowsTargetPlatformVersion 设置。CMake 会将 CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION 变量设置为选定的 SDK 版本。
在 CMake 3.27 之前,SDK 版本始终由 CMAKE_SYSTEM_VERSION 变量的值选择。用户或工具链文件可以将该变量设置为主机系统上可用的 Windows SDK 版本之一。由于 CMAKE_SYSTEM_VERSION 默认情况下是 CMAKE_HOST_SYSTEM_VERSION,并且不保证有匹配的 Windows SDK 版本可用,因此如果找不到精确匹配项,CMake 必须回退到使用最新的 Windows SDK 版本。此方法存在问题
最新的 Windows SDK 是否被选中,取决于主机 Windows 版本是否恰好匹配可用的 SDK 版本。
可能会选择一个旧的 Windows SDK 版本,该版本未针对 C11 等较新的语言标准进行更新。
CMake 3.27 及更高版本倾向于忽略 CMAKE_SYSTEM_VERSION 的确切值,并默认选择可用的最新 SDK 版本。可以使用 CMAKE_GENERATOR_PLATFORM 变量中的 version= 字段显式指定 SDK 版本。请参阅 Visual Studio Platform Selection。
此策略为尚未迁移到使用 CMAKE_SYSTEM_VERSION 来指定确切 SDK 版本的项目、工具链文件和构建脚本提供兼容性。
注意
此策略必须在项目顶部的第一个 project() 或 enable_language() 命令调用之前设置。此时 Visual Studio Generators 会选择一个 Windows SDK。
此策略的 OLD 行为是尽可能使用 CMAKE_SYSTEM_VERSION 的确切值。此策略的 NEW 行为是忽略它。
此策略是在 CMake 版本 3.27 中引入的。它可以通过 cmake_policy() 或 cmake_minimum_required() 设置。如果未设置,CMake *不会* 发出警告,并使用 OLD 行为。
注意
策略的 OLD 行为 根据定义已被弃用,并可能在未来的 CMake 版本中被移除。