VS: Implement generator toolset selection (#10722, #13774)

Implement generator toolset selection (cmake -T) for VS >= 10 by setting
the PlatformToolset.  Extend the RunCMake.GeneratorToolset test case to
verify CMAKE_GENERATOR_TOOLSET when the generator supports -T.

Since commit 485a940e (VS: Simplify MSVC version reporting, 2012-08-23)
all MSVC version information is detected during the compiler id step
from the actual compiler invoked by generated build systems rather than
hard-coded in VS generators.  Therefore we can set the PlatformToolset
in VS >= 10 project files and support toolsets from other VS versions.
This commit is contained in:
Brad King 2012-12-10 10:52:10 -05:00
parent 4fd5342956
commit 650c647160
7 changed files with 33 additions and 3 deletions

View File

@ -79,6 +79,14 @@ cmGlobalVisualStudio10Generator::cmGlobalVisualStudio10Generator(
"ProductDir", vc10Express, cmSystemTools::KeyWOW64_32);
}
//----------------------------------------------------------------------------
bool
cmGlobalVisualStudio10Generator::SetGeneratorToolset(std::string const& ts)
{
this->PlatformToolset = ts;
return true;
}
//----------------------------------------------------------------------------
void cmGlobalVisualStudio10Generator::AddPlatformDefinitions(cmMakefile* mf)
{

View File

@ -28,6 +28,8 @@ public:
const char* architectureId, const char* additionalPlatformDefinition);
static cmGlobalGeneratorFactory* NewFactory();
virtual bool SetGeneratorToolset(std::string const& ts);
virtual std::string
GenerateBuildCommand(const char* makeProgram,
const char *projectName,

View File

@ -540,6 +540,8 @@ private:
{"-T <toolset-name>", "Specify toolset name if supported by generator.", \
"Some CMake generators support a toolset name to be given to the " \
"native build system to choose a compiler. " \
"This is supported only on specific generators:\n" \
" Visual Studio >= 10\n" \
"See native build system documentation for allowed toolset names."}, \
{"-Wno-dev", "Suppress developer warnings.",\
"Suppress warnings that are meant for the author"\

View File

@ -2,9 +2,15 @@ include(RunCMake)
run_cmake(NoToolset)
set(RunCMake_TEST_OPTIONS -T "Bad Toolset")
run_cmake(BadToolset)
unset(RunCMake_TEST_OPTIONS)
if("${RunCMake_GENERATOR}" MATCHES "Visual Studio 1[01]")
set(RunCMake_TEST_OPTIONS -T "Test Toolset")
run_cmake(TestToolset)
unset(RunCMake_TEST_OPTIONS)
else()
set(RunCMake_TEST_OPTIONS -T "Bad Toolset")
run_cmake(BadToolset)
unset(RunCMake_TEST_OPTIONS)
endif()
set(RunCMake_TEST_OPTIONS -T "Toolset 1" "-TToolset 2")
run_cmake(TwoToolsets)

View File

@ -0,0 +1 @@
1

View File

@ -0,0 +1,4 @@
CMake Error at TestToolset.cmake:2 \(message\):
CMAKE_GENERATOR_TOOLSET is "Test Toolset" as expected.
Call Stack \(most recent call first\):
CMakeLists.txt:3 \(include\)

View File

@ -0,0 +1,7 @@
if("x${CMAKE_GENERATOR_TOOLSET}" STREQUAL "xTest Toolset")
message(FATAL_ERROR "CMAKE_GENERATOR_TOOLSET is \"Test Toolset\" as expected.")
else()
message(FATAL_ERROR
"CMAKE_GENERATOR_TOOLSET is \"${CMAKE_GENERATOR_TOOLSET}\" "
"but should be \"Test Toolset\"!")
endif()