Преглед изворни кода

Merge topic 'vs11-express'

7ee3cee VS11: Add VS 2012 Express support (#13348)
e17f345 VS11: Detect VS 2012 Express for default generator (#13348)
Brad King пре 13 година
родитељ
комит
fbe7b3cdfc

+ 1 - 1
Modules/CMakeDetermineCompilerId.cmake

@@ -143,7 +143,7 @@ Id flags: ${testflags}
       set(id_toolset "")
     endif()
     if("${CMAKE_MAKE_PROGRAM}" MATCHES "[Mm][Ss][Bb][Uu][Ii][Ll][Dd]")
-      set(build /p:Configuration=Debug /p:Platform=@id_arch@)
+      set(build /p:Configuration=Debug /p:Platform=@id_arch@ /p:VisualStudioVersion=${vs_version}.0)
     elseif("${CMAKE_MAKE_PROGRAM}" MATCHES "[Mm][Ss][Dd][Ee][Vv]")
       set(build /make)
     else()

+ 4 - 5
Modules/CMakeVS11FindMake.cmake

@@ -34,15 +34,14 @@ find_program(CMAKE_MAKE_PROGRAM
 
 # if devenv is not found, then use MSBuild.
 # it is expected that if devenv is not found, then we are
-# dealing with Visual Studio Express.  VCExpress has random
-# failures when being run as a command line build tool which
-# causes the compiler checks and try-compile stuff to fail. MSbuild
-# is a better choice for this.  However, VCExpress does not support
-# cross compiling needed for Win CE.
+# dealing with Visual Studio Express.
 if(NOT CMAKE_CROSSCOMPILING)
+  set(_FDIR "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\SxS\\VC7;FrameworkDir32]")
+  set(_FVER "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\SxS\\VC7;FrameworkVer32]")
   find_program(CMAKE_MAKE_PROGRAM
     NAMES MSBuild
     HINTS
+    ${_FDIR}/${_FVER}
     [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\11.0\\Setup\\VS;ProductDir]
     "$ENV{SYSTEMROOT}/Microsoft.NET/Framework/[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\11.0;CLR Version]/"
     "c:/WINDOWS/Microsoft.NET/Framework/[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\11.0;CLR Version]/"

+ 2 - 0
Source/cmGlobalVisualStudio10Generator.cxx

@@ -205,6 +205,8 @@ std::string cmGlobalVisualStudio10Generator
     {
     makeCommand += "Debug";
     }
+  makeCommand += " /p:VisualStudioVersion=";
+  makeCommand += this->GetIDEVersion();
   if ( additionalOptions )
     {
     makeCommand += " ";

+ 4 - 1
Source/cmGlobalVisualStudio11Generator.cxx

@@ -17,7 +17,10 @@
 cmGlobalVisualStudio11Generator::cmGlobalVisualStudio11Generator()
 {
   this->FindMakeProgramFile = "CMakeVS11FindMake.cmake";
-  this->ExpressEdition = false; // TODO: VS 11 Express support
+  std::string vc11Express;
+  this->ExpressEdition = cmSystemTools::ReadRegistryValue(
+    "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VCExpress\\11.0\\Setup\\VC;"
+    "ProductDir", vc11Express, cmSystemTools::KeyWOW64_32);
   this->PlatformToolset = "v110";
 }
 

+ 5 - 2
Source/cmake.cxx

@@ -2184,6 +2184,7 @@ int cmake::ActualConfigure()
       std::vector<std::string> vsVerions;
       vsVerions.push_back("VisualStudio\\");
       vsVerions.push_back("VCExpress\\");
+      vsVerions.push_back("WDExpress\\");
       struct VSRegistryEntryName
       {
         const char* MSVersion;
@@ -2196,10 +2197,11 @@ int cmake::ActualConfigure()
         {"8.0", "Visual Studio 8 2005"},
         {"9.0", "Visual Studio 9 2008"},
         {"10.0", "Visual Studio 10"},
+        {"11.0", "Visual Studio 11"},
         {0, 0}};
-      for(size_t b=0; b < vsVerions.size() && installedCompiler.empty(); b++)
+      for(int i=0; version[i].MSVersion != 0; i++)
         {
-        for(int i =0; version[i].MSVersion != 0; i++)
+        for(size_t b=0; b < vsVerions.size(); b++)
           {
           std::string reg = vsregBase + vsVerions[b] + version[i].MSVersion;
           reg += ";InstallDir]";
@@ -2208,6 +2210,7 @@ int cmake::ActualConfigure()
           if (!(reg == "/registry"))
             {
             installedCompiler = version[i].GeneratorName;
+            break;
             }
           }
         }