VS: Split user- and generator-provided PlatformToolset

Divide the cmGlobalVisualStudio10Generator "PlatformToolset" member into
two members representing the generator-selected default toolset and the
user-specified CMAKE_GENERATOR_TOOLSET value.  Prefer the user-specified
value, if any, and then fall back to the generator-selected default.
This commit is contained in:
Brad King 2014-06-04 13:09:35 -04:00
parent 3e9f6e36f3
commit 98afb4549f
4 changed files with 25 additions and 13 deletions

View File

@ -118,7 +118,7 @@ cmGlobalVisualStudio10Generator::MatchesGeneratorName(
bool
cmGlobalVisualStudio10Generator::SetGeneratorToolset(std::string const& ts)
{
this->PlatformToolset = ts;
this->GeneratorToolset = ts;
return true;
}
@ -126,10 +126,16 @@ cmGlobalVisualStudio10Generator::SetGeneratorToolset(std::string const& ts)
void cmGlobalVisualStudio10Generator::AddPlatformDefinitions(cmMakefile* mf)
{
cmGlobalVisualStudio8Generator::AddPlatformDefinitions(mf);
if(!this->PlatformToolset.empty())
this->AddVSPlatformToolsetDefinition(mf);
}
//----------------------------------------------------------------------------
void cmGlobalVisualStudio10Generator
::AddVSPlatformToolsetDefinition(cmMakefile* mf) const
{
if(const char* toolset = this->GetPlatformToolset())
{
mf->AddDefinition("CMAKE_VS_PLATFORM_TOOLSET",
this->PlatformToolset.c_str());
mf->AddDefinition("CMAKE_VS_PLATFORM_TOOLSET", toolset);
}
}
@ -215,11 +221,15 @@ void cmGlobalVisualStudio10Generator
}
//----------------------------------------------------------------------------
const char* cmGlobalVisualStudio10Generator::GetPlatformToolset()
const char* cmGlobalVisualStudio10Generator::GetPlatformToolset() const
{
if(!this->PlatformToolset.empty())
if(!this->GeneratorToolset.empty())
{
return this->PlatformToolset.c_str();
return this->GeneratorToolset.c_str();
}
if(!this->DefaultPlatformToolset.empty())
{
return this->DefaultPlatformToolset.c_str();
}
return 0;
}
@ -417,7 +427,7 @@ void cmGlobalVisualStudio10Generator::GenerateBuildCommand(
//----------------------------------------------------------------------------
bool cmGlobalVisualStudio10Generator::Find64BitTools(cmMakefile* mf)
{
if(!this->PlatformToolset.empty())
if(this->GetPlatformToolset())
{
return true;
}
@ -435,7 +445,7 @@ bool cmGlobalVisualStudio10Generator::Find64BitTools(cmMakefile* mf)
cmOStringStream m;
m << "Found Windows SDK v7.1: " << winSDK_7_1;
mf->DisplayStatus(m.str().c_str(), -1);
this->PlatformToolset = "Windows7.1SDK";
this->DefaultPlatformToolset = "Windows7.1SDK";
return true;
}
else

View File

@ -66,7 +66,7 @@ public:
bool IsMasmEnabled() const { return this->MasmEnabled; }
/** The toolset name for the target platform. */
const char* GetPlatformToolset();
const char* GetPlatformToolset() const;
/**
* Where does this version of Visual Studio look for macros for the
@ -99,7 +99,8 @@ protected:
std::string const& GetMSBuildCommand();
std::string PlatformToolset;
std::string GeneratorToolset;
std::string DefaultPlatformToolset;
bool ExpressEdition;
bool MasmEnabled;
@ -122,5 +123,6 @@ private:
virtual std::string FindMSBuildCommand();
virtual std::string FindDevEnvCommand();
virtual std::string GetVSMakeProgram() { return this->GetMSBuildCommand(); }
void AddVSPlatformToolsetDefinition(cmMakefile* mf) const;
};
#endif

View File

@ -117,7 +117,7 @@ cmGlobalVisualStudio11Generator::cmGlobalVisualStudio11Generator(
this->ExpressEdition = cmSystemTools::ReadRegistryValue(
"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VCExpress\\11.0\\Setup\\VC;"
"ProductDir", vc11Express, cmSystemTools::KeyWOW64_32);
this->PlatformToolset = "v110";
this->DefaultPlatformToolset = "v110";
}
//----------------------------------------------------------------------------

View File

@ -92,7 +92,7 @@ cmGlobalVisualStudio12Generator::cmGlobalVisualStudio12Generator(
this->ExpressEdition = cmSystemTools::ReadRegistryValue(
"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VCExpress\\12.0\\Setup\\VC;"
"ProductDir", vc12Express, cmSystemTools::KeyWOW64_32);
this->PlatformToolset = "v120";
this->DefaultPlatformToolset = "v120";
}
//----------------------------------------------------------------------------