CMP0149

在 3.27 版本中添加。

Visual Studio 生成器 默认选择最新的 Windows SDK。

Visual Studio 生成器选择一个 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 平台选择

此策略为尚未从使用 CMAKE_SYSTEM_VERSION 移植以指定确切 SDK 版本的项目、工具链文件和构建脚本提供兼容性。

注意

此策略必须在项目顶部的第一个 project()enable_language() 命令调用之前设置。即在 Visual Studio 生成器 选择 Windows SDK 时。

此策略的 OLD 行为是尽可能使用 CMAKE_SYSTEM_VERSION 的确切值。此策略的 NEW 行为是忽略它。

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

注意

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