瀏覽代碼

cmake: Fix default VS generator selection for Microsoft Build Tools

Some versions of the VS tools do not install the registry entry

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\$v;InstallDir

but all appear to set

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\$v\Setup\VC;ProductDir

Update our search to consider both entries.

Closes: #16360
Brad King 9 年之前
父節點
當前提交
5380948fae
共有 1 個文件被更改,包括 13 次插入7 次删除
  1. 13 7
      Source/cmake.cxx

+ 13 - 7
Source/cmake.cxx

@@ -1467,17 +1467,23 @@ void cmake::CreateDefaultGlobalGenerator()
     { "8.0", "Visual Studio 8 2005" },   //
     { "7.1", "Visual Studio 7 .NET 2003" }
   };
+  static const char* const vsEntries[] = {
+    "\\Setup\\VC;ProductDir", //
+    ";InstallDir"             //
+  };
   for (VSVersionedGenerator const* g = cmArrayBegin(vsGenerators);
        found.empty() && g != cmArrayEnd(vsGenerators); ++g) {
     for (const char* const* v = cmArrayBegin(vsVariants);
          found.empty() && v != cmArrayEnd(vsVariants); ++v) {
-      std::string reg = vsregBase + *v + g->MSVersion;
-      reg += ";InstallDir";
-      std::string dir;
-      if (cmSystemTools::ReadRegistryValue(reg, dir,
-                                           cmSystemTools::KeyWOW64_32) &&
-          cmSystemTools::PathExists(dir)) {
-        found = g->GeneratorName;
+      for (const char* const* e = cmArrayBegin(vsEntries);
+           found.empty() && e != cmArrayEnd(vsEntries); ++e) {
+        std::string const reg = vsregBase + *v + g->MSVersion + *e;
+        std::string dir;
+        if (cmSystemTools::ReadRegistryValue(reg, dir,
+                                             cmSystemTools::KeyWOW64_32) &&
+            cmSystemTools::PathExists(dir)) {
+          found = g->GeneratorName;
+        }
       }
     }
   }