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

View File

@ -67,8 +67,8 @@ IF(CMAKE_GENERATOR MATCHES "Visual Studio 6")
SET (CMAKE_NO_BUILD_TYPE 1) SET (CMAKE_NO_BUILD_TYPE 1)
ENDIF(CMAKE_GENERATOR MATCHES "Visual Studio 6") ENDIF(CMAKE_GENERATOR MATCHES "Visual Studio 6")
IF(CMAKE_GENERATOR MATCHES "Visual Studio 7") IF(CMAKE_GENERATOR MATCHES "Visual Studio 7")
SET (CMAKE_CONFIGURATION_TYPES "Debug Release MinSizeRel RelWithDebInfo" CACHE STRING SET (CMAKE_CONFIGURATION_TYPES "Debug;Release;MinSizeRel;RelWithDebInfo" CACHE STRING
"Space separated list of supported configuration types, only supports Debug, Release, MinSizeRel, and RelWithDebInfo, anything else will be ignored.") "Semicolon separated list of supported configuration types, only supports Debug, Release, MinSizeRel, and RelWithDebInfo, anything else will be ignored.")
SET (CMAKE_CXX_WARNING_LEVEL "3" CACHE STRING SET (CMAKE_CXX_WARNING_LEVEL "3" CACHE STRING
"Size of stack for programs.") "Size of stack for programs.")
SET (CMAKE_CXX_STACK_SIZE "10000000" CACHE STRING SET (CMAKE_CXX_STACK_SIZE "10000000" CACHE STRING

View File

@ -30,9 +30,40 @@ void cmGlobalVisualStudio6Generator::EnableLanguage(const char* lang,
mf->AddDefinition("CMAKE_CFG_INTDIR","$(IntDir)"); mf->AddDefinition("CMAKE_CFG_INTDIR","$(IntDir)");
mf->AddDefinition("CMAKE_GENERATOR_CC", "cl"); mf->AddDefinition("CMAKE_GENERATOR_CC", "cl");
mf->AddDefinition("CMAKE_GENERATOR_CXX", "cl"); mf->AddDefinition("CMAKE_GENERATOR_CXX", "cl");
this->GenerateConfigurations(mf);
this->cmGlobalGenerator::EnableLanguage(lang, 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 *, int cmGlobalVisualStudio6Generator::TryCompile(const char *,
const char *bindir, const char *bindir,
const char *projectName, const char *projectName,

View File

@ -66,6 +66,7 @@ public:
virtual void OutputDSWFile(); virtual void OutputDSWFile();
private: private:
void GenerateConfigurations(cmMakefile* mf);
void SetupTests(); void SetupTests();
void WriteDSWFile(std::ostream& fout); void WriteDSWFile(std::ostream& fout);
void WriteDSWHeader(std::ostream& fout); void WriteDSWHeader(std::ostream& fout);

View File

@ -33,11 +33,12 @@ void cmGlobalVisualStudio7Generator::EnableLanguage(const char* lang,
mf->AddDefinition("CMAKE_CFG_INTDIR","$(IntDir)"); mf->AddDefinition("CMAKE_CFG_INTDIR","$(IntDir)");
mf->AddDefinition("CMAKE_GENERATOR_CC", "cl"); mf->AddDefinition("CMAKE_GENERATOR_CC", "cl");
mf->AddDefinition("CMAKE_GENERATOR_CXX", "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); this->cmGlobalGenerator::EnableLanguage(lang, mf);
} }
int cmGlobalVisualStudio7Generator::TryCompile(const char *, int cmGlobalVisualStudio7Generator::TryCompile(const char *,
const char *bindir, const char *bindir,
const char *projectName, const char *projectName,
@ -150,7 +151,7 @@ void cmGlobalVisualStudio7Generator::SetupTests()
} }
} }
void cmGlobalVisualStudio7Generator::GenerateConfigurations() void cmGlobalVisualStudio7Generator::GenerateConfigurations(cmMakefile* mf)
{ {
// process the configurations // process the configurations
const char* ct const char* ct
@ -163,7 +164,7 @@ void cmGlobalVisualStudio7Generator::GenerateConfigurations()
std::string::size_type endpos = 0; std::string::size_type endpos = 0;
while(endpos != std::string::npos) while(endpos != std::string::npos)
{ {
endpos = configTypes.find(' ', start); endpos = configTypes.find_first_of(" ;", start);
std::string config; std::string config;
std::string::size_type len; std::string::size_type len;
if(endpos != std::string::npos) if(endpos != std::string::npos)
@ -200,13 +201,26 @@ void cmGlobalVisualStudio7Generator::GenerateConfigurations()
m_Configurations.push_back("Debug"); m_Configurations.push_back("Debug");
m_Configurations.push_back("Release"); 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() void cmGlobalVisualStudio7Generator::Generate()
{ {
// Generate the possible configuraitons
this->GenerateConfigurations();
// add a special target that depends on ALL projects for easy build // add a special target that depends on ALL projects for easy build
// of Debug only // of Debug only
m_LocalGenerators[0]->GetMakefile()-> m_LocalGenerators[0]->GetMakefile()->
@ -580,8 +594,6 @@ std::string cmGlobalVisualStudio7Generator::CreateGUID(const char* name)
void cmGlobalVisualStudio7Generator::LocalGenerate() void cmGlobalVisualStudio7Generator::LocalGenerate()
{ {
// load the possible configuraitons
this->GenerateConfigurations();
this->cmGlobalGenerator::LocalGenerate(); this->cmGlobalGenerator::LocalGenerate();
} }

View File

@ -78,7 +78,7 @@ public:
private: private:
void SetupTests(); void SetupTests();
void GenerateConfigurations(); void GenerateConfigurations(cmMakefile* mf);
void WriteSLNFile(std::ostream& fout); void WriteSLNFile(std::ostream& fout);
void WriteSLNHeader(std::ostream& fout); void WriteSLNHeader(std::ostream& fout);
void WriteProject(std::ostream& fout, void WriteProject(std::ostream& fout,

View File

@ -0,0 +1,3 @@
# When the dll templates are changed, this list should be
# updated with the list of possible configurations.
SET(CMAKE_CONFIGURATION_TYPES Debug Release MinSizeRel RelWithDebInfo)