diff options
author | Melven Roehrig-Zoellner <Melven.Roehrig-Zoellner@DLR.de> | 2016-02-11 23:00:10 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2016-02-16 15:18:38 (GMT) |
commit | 184da3f4f6ab74d2024455f8684286b2dbaa6a6e (patch) | |
tree | 59702cc7a217b79ec381ba88c6fa4e566ba162cf /Source/cmExtraCodeBlocksGenerator.cxx | |
parent | 8dfb6f8b372b159c050b6ea5e16b4e44dd9ed095 (diff) | |
download | CMake-184da3f4f6ab74d2024455f8684286b2dbaa6a6e.zip CMake-184da3f4f6ab74d2024455f8684286b2dbaa6a6e.tar.gz CMake-184da3f4f6ab74d2024455f8684286b2dbaa6a6e.tar.bz2 |
CodeBlocks: improve support for different compilers
More elaborate selection of the `compiler` tag in the generated
CodeBlocks project file:
* Fortran language support
* support for several of the predefined compilers recognized by
CodeBlocks (16.01)
Diffstat (limited to 'Source/cmExtraCodeBlocksGenerator.cxx')
-rw-r--r-- | Source/cmExtraCodeBlocksGenerator.cxx | 61 |
1 files changed, 55 insertions, 6 deletions
diff --git a/Source/cmExtraCodeBlocksGenerator.cxx b/Source/cmExtraCodeBlocksGenerator.cxx index 9348ef2..026958a 100644 --- a/Source/cmExtraCodeBlocksGenerator.cxx +++ b/Source/cmExtraCodeBlocksGenerator.cxx @@ -684,18 +684,38 @@ void cmExtraCodeBlocksGenerator::AppendTarget(cmGeneratedFileStream& fout, std::string cmExtraCodeBlocksGenerator::GetCBCompilerId(const cmMakefile* mf) { // figure out which language to use - // for now care only for C and C++ - std::string compilerIdVar = "CMAKE_CXX_COMPILER_ID"; - if (this->GlobalGenerator->GetLanguageEnabled("CXX") == false) + // for now care only for C, C++, and Fortran + + // projects with C/C++ and Fortran are handled as C/C++ projects + bool pureFortran = false; + std::string compilerIdVar; + if (this->GlobalGenerator->GetLanguageEnabled("CXX") == true) + { + compilerIdVar = "CMAKE_CXX_COMPILER_ID"; + } + else if (this->GlobalGenerator->GetLanguageEnabled("C") == true) { compilerIdVar = "CMAKE_C_COMPILER_ID"; } + else if (this->GlobalGenerator->GetLanguageEnabled("Fortran") == true) + { + compilerIdVar = "CMAKE_Fortran_COMPILER_ID"; + pureFortran = true; + } + std::string compilerId = mf->GetSafeDefinition(compilerIdVar); std::string compiler = "gcc"; // default to gcc if (compilerId == "MSVC") { - compiler = "msvc8"; + if( mf->IsDefinitionSet("MSVC10") == true ) + { + compiler = "msvc10"; + } + else + { + compiler = "msvc8"; + } } else if (compilerId == "Borland") { @@ -707,15 +727,44 @@ std::string cmExtraCodeBlocksGenerator::GetCBCompilerId(const cmMakefile* mf) } else if (compilerId == "Intel") { - compiler = "icc"; + if (pureFortran && mf->IsDefinitionSet("WIN32")) + { + compiler = "ifcwin"; // Intel Fortran for Windows (known by cbFortran) + } + else + { + compiler = "icc"; + } } else if (compilerId == "Watcom" || compilerId == "OpenWatcom") { compiler = "ow"; } + else if (compilerId == "Clang") + { + compiler = "clang"; + } + else if (compilerId == "PGI") + { + if (pureFortran) + { + compiler = "pgifortran"; + } + else + { + compiler = "pgi"; // does not exist as default in CodeBlocks 16.01 + } + } else if (compilerId == "GNU") { - compiler = "gcc"; + if (pureFortran) + { + compiler = "gfortran"; + } + else + { + compiler = "gcc"; + } } return compiler; } |