diff options
author | Brad King <brad.king@kitware.com> | 2002-12-20 17:59:18 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2002-12-20 17:59:18 (GMT) |
commit | 4e6ad941e981e81b53876508d17d1c3ef06938f2 (patch) | |
tree | 01940cd7e170d0db1c808a9dc381c866d83a03fa /Source | |
parent | 309748ff79d827e191e93f8c28f42768dd5d3966 (diff) | |
download | CMake-4e6ad941e981e81b53876508d17d1c3ef06938f2.zip CMake-4e6ad941e981e81b53876508d17d1c3ef06938f2.tar.gz CMake-4e6ad941e981e81b53876508d17d1c3ef06938f2.tar.bz2 |
ENH: Visual Studio 6 and 7 generators now set CMAKE_CONFIGURATION_TYPES to be a semicolon-separated list of configurations that will be built.
Diffstat (limited to 'Source')
-rw-r--r-- | Source/cmGlobalVisualStudio6Generator.cxx | 31 | ||||
-rw-r--r-- | Source/cmGlobalVisualStudio6Generator.h | 1 | ||||
-rw-r--r-- | Source/cmGlobalVisualStudio7Generator.cxx | 30 | ||||
-rw-r--r-- | Source/cmGlobalVisualStudio7Generator.h | 2 |
4 files changed, 54 insertions, 10 deletions
diff --git a/Source/cmGlobalVisualStudio6Generator.cxx b/Source/cmGlobalVisualStudio6Generator.cxx index c19ba04..111a0a2 100644 --- a/Source/cmGlobalVisualStudio6Generator.cxx +++ b/Source/cmGlobalVisualStudio6Generator.cxx @@ -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, diff --git a/Source/cmGlobalVisualStudio6Generator.h b/Source/cmGlobalVisualStudio6Generator.h index 9e72b85..be2dfd9 100644 --- a/Source/cmGlobalVisualStudio6Generator.h +++ b/Source/cmGlobalVisualStudio6Generator.h @@ -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); diff --git a/Source/cmGlobalVisualStudio7Generator.cxx b/Source/cmGlobalVisualStudio7Generator.cxx index 7e62e21..f7a0a45 100644 --- a/Source/cmGlobalVisualStudio7Generator.cxx +++ b/Source/cmGlobalVisualStudio7Generator.cxx @@ -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(); } diff --git a/Source/cmGlobalVisualStudio7Generator.h b/Source/cmGlobalVisualStudio7Generator.h index ce87c6b..2fa8ca6 100644 --- a/Source/cmGlobalVisualStudio7Generator.h +++ b/Source/cmGlobalVisualStudio7Generator.h @@ -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, |