Quellcode durchsuchen

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)
Melven Roehrig-Zoellner vor 9 Jahren
Ursprung
Commit
184da3f4f6
1 geänderte Dateien mit 55 neuen und 6 gelöschten Zeilen
  1. 55 6
      Source/cmExtraCodeBlocksGenerator.cxx

+ 55 - 6
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;
 }