CMP0149¶
在版本 3.27 中添加。
Visual Studio 生成器 默认选择最新的 Windows SDK。
Visual Studio 生成器选择一个 Windows SDK 版本,将其放入 WindowsTargetPlatformVersion
设置中 .vcxproj
文件。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 版本匹配。
可能会选择尚未针对较新的语言标准(如 C11)进行更新的旧版 Windows SDK。
CMake 3.27 及更高版本更喜欢忽略 CMAKE_SYSTEM_VERSION
的确切值,并且默认选择可用的最新 SDK 版本。可以使用 CMAKE_GENERATOR_PLATFORM
变量中的 version=
字段显式指定确切的 SDK 版本。请参见 Visual Studio Platform Selection(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 中删除。