ENH: Visual Studio 6 and 7 generators now set CMAKE_CONFIGURATION_TYPES to be a semicolon-separated list of configurations that will be built.

This commit is contained in:
Brad King
2002-12-20 12:59:18 -05:00
parent 309748ff79
commit 4e6ad941e9
6 changed files with 59 additions and 12 deletions
+31
View File
@@ -30,9 +30,40 @@ void cmGlobalVisualStudio6Generator::EnableLanguage(const char* lang,
mf->AddDefinition("CMAKE_CFG_INTDIR","$(IntDir)");
mf->AddDefinition("CMAKE_GENERATOR_CC", "cl");
mf->AddDefinition("CMAKE_GENERATOR_CXX", "cl");
this->GenerateConfigurations(mf);
this->cmGlobalGenerator::EnableLanguage(lang, mf);
}
void cmGlobalVisualStudio6Generator::GenerateConfigurations(cmMakefile* mf)
{
std::string fname= mf->GetDefinition("CMAKE_ROOT");
const char* def= mf->GetDefinition( "MSPROJECT_TEMPLATE_DIRECTORY");
if(def)
{
fname = def;
}
else
{
fname += "/Templates";
}
fname += "/CMakeVisualStudio6Configurations.cmake";
if(!mf->ReadListFile(mf->GetCurrentListFile(), fname.c_str()))
{
cmSystemTools::Error("Cannot open ", fname.c_str(),
". Please copy this file from the main "
"CMake/Templates directory and edit it for "
"your build configurations.");
}
else if(!mf->GetDefinition("CMAKE_CONFIGURATION_TYPES"))
{
cmSystemTools::Error("CMAKE_CONFIGURATION_TYPES not set by ",
fname.c_str(),
". Please copy this file from the main "
"CMake/Templates directory and edit it for "
"your build configurations.");
}
}
int cmGlobalVisualStudio6Generator::TryCompile(const char *,
const char *bindir,
const char *projectName,
+1
View File
@@ -66,6 +66,7 @@ public:
virtual void OutputDSWFile();
private:
void GenerateConfigurations(cmMakefile* mf);
void SetupTests();
void WriteDSWFile(std::ostream& fout);
void WriteDSWHeader(std::ostream& fout);
+21 -9
View File
@@ -33,11 +33,12 @@ void cmGlobalVisualStudio7Generator::EnableLanguage(const char* lang,
mf->AddDefinition("CMAKE_CFG_INTDIR","$(IntDir)");
mf->AddDefinition("CMAKE_GENERATOR_CC", "cl");
mf->AddDefinition("CMAKE_GENERATOR_CXX", "cl");
// Create list of configurations requested by user's cache, if any.
this->GenerateConfigurations(mf);
this->cmGlobalGenerator::EnableLanguage(lang, mf);
}
int cmGlobalVisualStudio7Generator::TryCompile(const char *,
const char *bindir,
const char *projectName,
@@ -150,7 +151,7 @@ void cmGlobalVisualStudio7Generator::SetupTests()
}
}
void cmGlobalVisualStudio7Generator::GenerateConfigurations()
void cmGlobalVisualStudio7Generator::GenerateConfigurations(cmMakefile* mf)
{
// process the configurations
const char* ct
@@ -163,7 +164,7 @@ void cmGlobalVisualStudio7Generator::GenerateConfigurations()
std::string::size_type endpos = 0;
while(endpos != std::string::npos)
{
endpos = configTypes.find(' ', start);
endpos = configTypes.find_first_of(" ;", start);
std::string config;
std::string::size_type len;
if(endpos != std::string::npos)
@@ -200,13 +201,26 @@ void cmGlobalVisualStudio7Generator::GenerateConfigurations()
m_Configurations.push_back("Debug");
m_Configurations.push_back("Release");
}
// Reset the entry to have a semi-colon separated list.
std::string configs = m_Configurations[0];
for(unsigned int i=1; i < m_Configurations.size(); ++i)
{
configs += ";";
configs += m_Configurations[i];
}
mf->AddCacheDefinition(
"CMAKE_CONFIGURATION_TYPES",
configs.c_str(),
"Semicolon separated list of supported configuration types, "
"only supports Debug, Release, MinSizeRel, and RelWithDebInfo, "
"anything else will be ignored.",
cmCacheManager::STRING);
}
void cmGlobalVisualStudio7Generator::Generate()
{
// Generate the possible configuraitons
this->GenerateConfigurations();
// add a special target that depends on ALL projects for easy build
// of Debug only
m_LocalGenerators[0]->GetMakefile()->
@@ -580,8 +594,6 @@ std::string cmGlobalVisualStudio7Generator::CreateGUID(const char* name)
void cmGlobalVisualStudio7Generator::LocalGenerate()
{
// load the possible configuraitons
this->GenerateConfigurations();
this->cmGlobalGenerator::LocalGenerate();
}
+1 -1
View File
@@ -78,7 +78,7 @@ public:
private:
void SetupTests();
void GenerateConfigurations();
void GenerateConfigurations(cmMakefile* mf);
void WriteSLNFile(std::ostream& fout);
void WriteSLNHeader(std::ostream& fout);
void WriteProject(std::ostream& fout,