Przeglądaj źródła

VS11: Add VS 2012 Express support (#13348)

Use the registry entries that vsvars32.bat uses to detect the location of
MSBuild.exe in the framework directory.  Invoke MSBuild with the option

 /p:VisualStudioVersion=$version

so it knows from which VS version to load the system build rules.  Teach
cmGlobalVisualStudio11Generator to set its ExpressEdition member using the
registry.
Brad King 13 lat temu
rodzic
commit
7ee3cee919

+ 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";
 }