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 的未来版本中移除。