From 7ee3cee9199e1207813e245b2bca18526d6bd74c Mon Sep 17 00:00:00 2001 From: Brad King Date: Tue, 18 Sep 2012 11:39:34 -0400 Subject: [PATCH] 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. --- Modules/CMakeDetermineCompilerId.cmake | 2 +- Modules/CMakeVS11FindMake.cmake | 9 ++++----- Source/cmGlobalVisualStudio10Generator.cxx | 2 ++ Source/cmGlobalVisualStudio11Generator.cxx | 5 ++++- 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/Modules/CMakeDetermineCompilerId.cmake b/Modules/CMakeDetermineCompilerId.cmake index 3df17c7c6..8e383990f 100644 --- a/Modules/CMakeDetermineCompilerId.cmake +++ b/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() diff --git a/Modules/CMakeVS11FindMake.cmake b/Modules/CMakeVS11FindMake.cmake index c55a4c53a..2df015d40 100644 --- a/Modules/CMakeVS11FindMake.cmake +++ b/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]/" diff --git a/Source/cmGlobalVisualStudio10Generator.cxx b/Source/cmGlobalVisualStudio10Generator.cxx index d1889809d..480c577f2 100644 --- a/Source/cmGlobalVisualStudio10Generator.cxx +++ b/Source/cmGlobalVisualStudio10Generator.cxx @@ -205,6 +205,8 @@ std::string cmGlobalVisualStudio10Generator { makeCommand += "Debug"; } + makeCommand += " /p:VisualStudioVersion="; + makeCommand += this->GetIDEVersion(); if ( additionalOptions ) { makeCommand += " "; diff --git a/Source/cmGlobalVisualStudio11Generator.cxx b/Source/cmGlobalVisualStudio11Generator.cxx index 7bb4d0c4a..23a1204bd 100644 --- a/Source/cmGlobalVisualStudio11Generator.cxx +++ b/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"; }