瀏覽代碼

VS: Add support for setting WindowsTargetPlatformVersion to 10.0

VS 2019 and above support this value to select a SDK version
automatically.

Fixes: #21403
Brad King 2 年之前
父節點
當前提交
b512c53d43

+ 4 - 0
Help/variable/CMAKE_GENERATOR_PLATFORM.rst

@@ -56,6 +56,10 @@ Supported pairs are:
 
   The ``<version>`` may be one of:
 
+  ``10.0``
+    Specify that any 10.0 SDK version may be used, and let Visual Studio
+    pick one.  This is supported by VS 2019 and above.
+
   ``10.0.<build>.<increment>``
     Specify the exact 4-component SDK version, e.g., ``10.0.19041.0``.
     The specified version of the SDK must be installed.  It may not exceed

+ 10 - 0
Source/cmGlobalVisualStudio14Generator.cxx

@@ -355,6 +355,16 @@ std::string cmGlobalVisualStudio14Generator::GetWindows10SDKVersion(
   cmMakefile* mf)
 {
 #if defined(_WIN32) && !defined(__CYGWIN__)
+  // Accept specific version requests as-is.
+  if (this->GeneratorPlatformVersion) {
+    std::string const& ver = *this->GeneratorPlatformVersion;
+
+    // VS 2019 and above support specifying plain "10.0".
+    if (this->Version >= VSVersion::VS16 && ver == "10.0") {
+      return ver;
+    }
+  }
+
   std::vector<std::string> win10Roots;
 
   {

+ 8 - 0
Tests/RunCMake/GeneratorPlatform/RunCMakeTest.cmake

@@ -39,6 +39,14 @@ if("${RunCMake_GENERATOR}" MATCHES "^Visual Studio (1[4567])( 20[0-9][0-9])?$")
   set(RunCMake_GENERATOR_PLATFORM "version=8.1")
   run_cmake_with_options(BadVersionPlatform -DCMAKE_SYSTEM_VERSION=8.1)
 
+  if(NOT RunCMake_GENERATOR MATCHES "^Visual Studio (1[45]) ")
+    set(expect_version "10.0")
+    set(RunCMake_GENERATOR_PLATFORM "version=${expect_version}")
+    set(RunCMake_TEST_VARIANT_DESCRIPTION "-${expect_version}")
+    run_cmake_with_options(VersionExists -DCMAKE_SYSTEM_VERSION=10.0)
+    unset(RunCMake_GENERATOR_PLATFORM)
+  endif()
+
   set(kits "")
   cmake_host_system_information(RESULT kitsRoot10
     QUERY WINDOWS_REGISTRY "HKLM/SOFTWARE/Microsoft/Windows Kits/Installed Roots"