Added in version 3.27.
Visual Studio Generators select latest Windows SDK by default.
Visual Studio Generators select a Windows SDK version to put in the WindowsTargetPlatformVersion setting in .vcxproj files. CMake sets the CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION variable to the selected SDK version.
Prior to CMake 3.27, the SDK version was always selected by the value of the CMAKE_SYSTEM_VERSION variable. Users or toolchain files could set that variable to one of the exact Windows SDK versions available on the host system. Since CMAKE_SYSTEM_VERSION defaults to CMAKE_HOST_SYSTEM_VERSION, and it is not guaranteed that a matching Windows SDK version is available, CMake had to fall back to using the latest Windows SDK version if no exact match was available. This approach was problematic:
CMake 3.27 and higher prefer to ignore the exact value of CMAKE_SYSTEM_VERSION and by default select the latest SDK version available. An exact SDK version may be specified explicitly using a version= field in the CMAKE_GENERATOR_PLATFORM variable. See Visual Studio Platform Selection.
This policy provides compatibility for projects, toolchain files, and build scripts that have not been ported away from using CMAKE_SYSTEM_VERSION to specify an exact SDK version.
Note
This policy must be set before the first project() or enable_language() command invocation at the top of the project. That is when Visual Studio Generators select a Windows SDK.
The OLD behavior for this policy is to use the exact value of CMAKE_SYSTEM_VERSION if possible. The NEW behavior for this policy is to ignore it.
This policy was introduced in CMake version 3.27. It may be set by cmake_policy() or cmake_minimum_required(). If it is not set, CMake does not warn, and uses OLD behavior.
Note
The OLD behavior of a policy is deprecated by definition and may be removed in a future version of CMake.
© 2000–2024 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.31/policy/CMP0149.html