From 0c55729c133b7b069f27f19d035444032dda75bd Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 4 Dec 2013 10:35:04 -0500 Subject: [PATCH] VS: Add CMAKE_VS_(DEVENV|MSBUILD|MSDEV)_COMMAND variables Since commit 5f5c92b9 (VS: Add internal APIs to find MSBuild, devenv/VCExpress, and msdev, 2013-11-13) the VS generators have known how to lookup the locations of their build tools directly. Expose this information to CMake language code by defining new variables to hold the paths to these tools. --- Help/manual/cmake-variables.7.rst | 3 +++ Help/variable/CMAKE_MAKE_PROGRAM.rst | 4 ++++ Help/variable/CMAKE_VS_DEVENV_COMMAND.rst | 14 ++++++++++++++ Help/variable/CMAKE_VS_MSBUILD_COMMAND.rst | 13 +++++++++++++ Help/variable/CMAKE_VS_MSDEV_COMMAND.rst | 10 ++++++++++ Source/cmGlobalVisualStudio10Generator.cxx | 8 ++++++++ Source/cmGlobalVisualStudio10Generator.h | 2 ++ Source/cmGlobalVisualStudio6Generator.cxx | 8 ++++++++ Source/cmGlobalVisualStudio6Generator.h | 2 ++ Source/cmGlobalVisualStudio7Generator.cxx | 8 ++++++++ Source/cmGlobalVisualStudio7Generator.h | 2 ++ 11 files changed, 74 insertions(+) create mode 100644 Help/variable/CMAKE_VS_DEVENV_COMMAND.rst create mode 100644 Help/variable/CMAKE_VS_MSBUILD_COMMAND.rst create mode 100644 Help/variable/CMAKE_VS_MSDEV_COMMAND.rst diff --git a/Help/manual/cmake-variables.7.rst b/Help/manual/cmake-variables.7.rst index 59e806443..d1176ad46 100644 --- a/Help/manual/cmake-variables.7.rst +++ b/Help/manual/cmake-variables.7.rst @@ -65,7 +65,10 @@ Variables that Provide Information /variable/CMAKE_TWEAK_VERSION /variable/CMAKE_VERBOSE_MAKEFILE /variable/CMAKE_VERSION + /variable/CMAKE_VS_DEVENV_COMMAND /variable/CMAKE_VS_INTEL_Fortran_PROJECT_VERSION + /variable/CMAKE_VS_MSBUILD_COMMAND + /variable/CMAKE_VS_MSDEV_COMMAND /variable/CMAKE_VS_PLATFORM_TOOLSET /variable/CMAKE_XCODE_PLATFORM_TOOLSET /variable/PROJECT_BINARY_DIR diff --git a/Help/variable/CMAKE_MAKE_PROGRAM.rst b/Help/variable/CMAKE_MAKE_PROGRAM.rst index 0c851ad20..97caa8a64 100644 --- a/Help/variable/CMAKE_MAKE_PROGRAM.rst +++ b/Help/variable/CMAKE_MAKE_PROGRAM.rst @@ -29,6 +29,10 @@ to configure the project: * The Visual Studio generators set this to the full path to ``MSBuild.exe`` (VS >= 10), ``devenv.com`` (VS 7,8,9), ``VCExpress.exe`` (VS Express 8,9), or ``msdev.exe`` (VS 6). + (See also variables + :variable:`CMAKE_VS_MSBUILD_COMMAND`, + :variable:`CMAKE_VS_DEVENV_COMMAND`, and + :variable:`CMAKE_VS_MSDEV_COMMAND`.) These generators prefer to lookup the build tool at build time rather than to store ``CMAKE_MAKE_PROGRAM`` in the CMake cache diff --git a/Help/variable/CMAKE_VS_DEVENV_COMMAND.rst b/Help/variable/CMAKE_VS_DEVENV_COMMAND.rst new file mode 100644 index 000000000..14cc50ac6 --- /dev/null +++ b/Help/variable/CMAKE_VS_DEVENV_COMMAND.rst @@ -0,0 +1,14 @@ +CMAKE_VS_DEVENV_COMMAND +----------------------- + +The generators for :generator:`Visual Studio 7` and above set this +variable to the ``devenv.com`` command installed with the corresponding +Visual Studio version. Note that this variable may be empty on +Visual Studio Express editions because they do not provide this tool. + +This variable is not defined by other generators even if ``devenv.com`` +is installed on the computer. + +The :variable:`CMAKE_VS_MSBUILD_COMMAND` is also provided for +:generator:`Visual Studio 10 2010` and above. +See also the :variable:`CMAKE_MAKE_PROGRAM` variable. diff --git a/Help/variable/CMAKE_VS_MSBUILD_COMMAND.rst b/Help/variable/CMAKE_VS_MSBUILD_COMMAND.rst new file mode 100644 index 000000000..58f2bef4c --- /dev/null +++ b/Help/variable/CMAKE_VS_MSBUILD_COMMAND.rst @@ -0,0 +1,13 @@ +CMAKE_VS_MSBUILD_COMMAND +------------------------ + +The generators for :generator:`Visual Studio 10 2010` and above set this +variable to the ``MSBuild.exe`` command installed with the corresponding +Visual Studio version. + +This variable is not defined by other generators even if ``MSBuild.exe`` +is installed on the computer. + +The :variable:`CMAKE_VS_DEVENV_COMMAND` is also provided for the +non-Express editions of Visual Studio. +See also the :variable:`CMAKE_MAKE_PROGRAM` variable. diff --git a/Help/variable/CMAKE_VS_MSDEV_COMMAND.rst b/Help/variable/CMAKE_VS_MSDEV_COMMAND.rst new file mode 100644 index 000000000..718baaf82 --- /dev/null +++ b/Help/variable/CMAKE_VS_MSDEV_COMMAND.rst @@ -0,0 +1,10 @@ +CMAKE_VS_MSDEV_COMMAND +---------------------- + +The :generator:`Visual Studio 6` generator sets this variable to the +``msdev.exe`` command installed with Visual Studio 6. + +This variable is not defined by other generators even if ``msdev.exe`` +is installed on the computer. + +See also the :variable:`CMAKE_MAKE_PROGRAM` variable. diff --git a/Source/cmGlobalVisualStudio10Generator.cxx b/Source/cmGlobalVisualStudio10Generator.cxx index 29401c6bf..d0fe5d943 100644 --- a/Source/cmGlobalVisualStudio10Generator.cxx +++ b/Source/cmGlobalVisualStudio10Generator.cxx @@ -255,6 +255,14 @@ std::string cmGlobalVisualStudio10Generator::GetUserMacrosRegKeyBase() return "Software\\Microsoft\\VisualStudio\\10.0\\vsmacros"; } +//---------------------------------------------------------------------------- +void cmGlobalVisualStudio10Generator::FindMakeProgram(cmMakefile* mf) +{ + this->cmGlobalVisualStudio8Generator::FindMakeProgram(mf); + mf->AddDefinition("CMAKE_VS_MSBUILD_COMMAND", + this->GetMSBuildCommand().c_str()); +} + //---------------------------------------------------------------------------- std::string const& cmGlobalVisualStudio10Generator::GetMSBuildCommand() { diff --git a/Source/cmGlobalVisualStudio10Generator.h b/Source/cmGlobalVisualStudio10Generator.h index 66440ea66..976d41fa1 100644 --- a/Source/cmGlobalVisualStudio10Generator.h +++ b/Source/cmGlobalVisualStudio10Generator.h @@ -91,6 +91,8 @@ public: virtual const char* GetToolsVersion() { return "4.0"; } + virtual void FindMakeProgram(cmMakefile*); + protected: virtual const char* GetIDEVersion() { return "10.0"; } diff --git a/Source/cmGlobalVisualStudio6Generator.cxx b/Source/cmGlobalVisualStudio6Generator.cxx index 8651da7b5..614a79af1 100644 --- a/Source/cmGlobalVisualStudio6Generator.cxx +++ b/Source/cmGlobalVisualStudio6Generator.cxx @@ -77,6 +77,14 @@ void cmGlobalVisualStudio6Generator::GenerateConfigurations(cmMakefile* mf) } } +//---------------------------------------------------------------------------- +void cmGlobalVisualStudio6Generator::FindMakeProgram(cmMakefile* mf) +{ + this->cmGlobalVisualStudioGenerator::FindMakeProgram(mf); + mf->AddDefinition("CMAKE_VS_MSDEV_COMMAND", + this->GetMSDevCommand().c_str()); +} + //---------------------------------------------------------------------------- std::string const& cmGlobalVisualStudio6Generator::GetMSDevCommand() { diff --git a/Source/cmGlobalVisualStudio6Generator.h b/Source/cmGlobalVisualStudio6Generator.h index 8fe5792c9..cb6cb8b5b 100644 --- a/Source/cmGlobalVisualStudio6Generator.h +++ b/Source/cmGlobalVisualStudio6Generator.h @@ -89,6 +89,8 @@ public: ///! What is the configurations directory variable called? virtual const char* GetCMakeCFGIntDir() const { return "$(IntDir)"; } + virtual void FindMakeProgram(cmMakefile*); + protected: virtual const char* GetIDEVersion() { return "6.0"; } private: diff --git a/Source/cmGlobalVisualStudio7Generator.cxx b/Source/cmGlobalVisualStudio7Generator.cxx index 3d939f353..35d7796e9 100644 --- a/Source/cmGlobalVisualStudio7Generator.cxx +++ b/Source/cmGlobalVisualStudio7Generator.cxx @@ -110,6 +110,14 @@ void cmGlobalVisualStudio7Generator } +//---------------------------------------------------------------------------- +void cmGlobalVisualStudio7Generator::FindMakeProgram(cmMakefile* mf) +{ + this->cmGlobalVisualStudioGenerator::FindMakeProgram(mf); + mf->AddDefinition("CMAKE_VS_DEVENV_COMMAND", + this->GetDevEnvCommand().c_str()); +} + //---------------------------------------------------------------------------- std::string const& cmGlobalVisualStudio7Generator::GetDevEnvCommand() { diff --git a/Source/cmGlobalVisualStudio7Generator.h b/Source/cmGlobalVisualStudio7Generator.h index c7b008190..59e74baf1 100644 --- a/Source/cmGlobalVisualStudio7Generator.h +++ b/Source/cmGlobalVisualStudio7Generator.h @@ -107,6 +107,8 @@ public: const char* GetIntelProjectVersion(); + virtual void FindMakeProgram(cmMakefile*); + protected: virtual const char* GetIDEVersion() { return "7.0"; }