Преглед на файлове

VS: Parameterize VS 2017 generator to support future versions

Brad King преди 6 години
родител
ревизия
bdef729646
променени са 2 файла, в които са добавени 42 реда и са изтрити 9 реда
  1. 41 8
      Source/cmGlobalVisualStudioVersionedGenerator.cxx
  2. 1 1
      Source/cmGlobalVisualStudioVersionedGenerator.h

+ 41 - 8
Source/cmGlobalVisualStudioVersionedGenerator.cxx

@@ -8,6 +8,26 @@
 #include "cmMakefile.h"
 #include "cmVSSetupHelper.h"
 
+static unsigned int VSVersionToMajor(
+  cmGlobalVisualStudioGenerator::VSVersion v)
+{
+  switch (v) {
+    case cmGlobalVisualStudioGenerator::VS9:
+      return 9;
+    case cmGlobalVisualStudioGenerator::VS10:
+      return 10;
+    case cmGlobalVisualStudioGenerator::VS11:
+      return 11;
+    case cmGlobalVisualStudioGenerator::VS12:
+      return 12;
+    case cmGlobalVisualStudioGenerator::VS14:
+      return 14;
+    case cmGlobalVisualStudioGenerator::VS15:
+      return 15;
+  }
+  return 0;
+}
+
 static const char vs15generatorName[] = "Visual Studio 15 2017";
 
 // Map generator name without year to name with year.
@@ -38,16 +58,19 @@ public:
       return 0;
     }
     if (!*p) {
-      return new cmGlobalVisualStudioVersionedGenerator(cm, genName, "");
+      return new cmGlobalVisualStudioVersionedGenerator(
+        cmGlobalVisualStudioGenerator::VS15, cm, genName, "");
     }
     if (*p++ != ' ') {
       return 0;
     }
     if (strcmp(p, "Win64") == 0) {
-      return new cmGlobalVisualStudioVersionedGenerator(cm, genName, "x64");
+      return new cmGlobalVisualStudioVersionedGenerator(
+        cmGlobalVisualStudioGenerator::VS15, cm, genName, "x64");
     }
     if (strcmp(p, "ARM") == 0) {
-      return new cmGlobalVisualStudioVersionedGenerator(cm, genName, "ARM");
+      return new cmGlobalVisualStudioVersionedGenerator(
+        cmGlobalVisualStudioGenerator::VS15, cm, genName, "ARM");
     }
     return 0;
   }
@@ -77,25 +100,35 @@ cmGlobalVisualStudioVersionedGenerator::NewFactory15()
 }
 
 cmGlobalVisualStudioVersionedGenerator::cmGlobalVisualStudioVersionedGenerator(
-  cmake* cm, const std::string& name,
+  VSVersion version, cmake* cm, const std::string& name,
   std::string const& platformInGeneratorName)
   : cmGlobalVisualStudio14Generator(cm, name, platformInGeneratorName)
-  , vsSetupAPIHelper(15)
+  , vsSetupAPIHelper(VSVersionToMajor(version))
 {
   this->ExpressEdition = false;
   this->DefaultPlatformToolset = "v141";
   this->DefaultCLFlagTableName = "v141";
   this->DefaultCSharpFlagTableName = "v141";
   this->DefaultLinkFlagTableName = "v141";
-  this->Version = VS15;
+  this->Version = version;
 }
 
 bool cmGlobalVisualStudioVersionedGenerator::MatchesGeneratorName(
   const std::string& name) const
 {
   std::string genName;
-  if (cmVS15GenName(name, genName)) {
-    return genName == this->GetName();
+  switch (this->Version) {
+    case cmGlobalVisualStudioGenerator::VS9:
+    case cmGlobalVisualStudioGenerator::VS10:
+    case cmGlobalVisualStudioGenerator::VS11:
+    case cmGlobalVisualStudioGenerator::VS12:
+    case cmGlobalVisualStudioGenerator::VS14:
+      break;
+    case cmGlobalVisualStudioGenerator::VS15:
+      if (cmVS15GenName(name, genName)) {
+        return genName == this->GetName();
+      }
+      break;
   }
   return false;
 }

+ 1 - 1
Source/cmGlobalVisualStudioVersionedGenerator.h

@@ -32,7 +32,7 @@ public:
 
 protected:
   cmGlobalVisualStudioVersionedGenerator(
-    cmake* cm, const std::string& name,
+    VSVersion version, cmake* cm, const std::string& name,
     std::string const& platformInGeneratorName);
 
   bool InitializeWindows(cmMakefile* mf) override;