浏览代码

CodeLite: Better support for Fortran and Windows

Fortran source files are added to the src folder of CodeLite projects and
the "Compile Single File" command uses "$(CurrentFileFullName)"
instead of "$(CurrentFileName)" with the correct filename extension
for object files on windows now.
Tobias R. Henle 7 年之前
父节点
当前提交
51caac6958
共有 1 个文件被更改,包括 16 次插入15 次删除
  1. 16 15
      Source/cmExtraCodeLiteGenerator.cxx

+ 16 - 15
Source/cmExtraCodeLiteGenerator.cxx

@@ -198,8 +198,6 @@ std::string cmExtraCodeLiteGenerator::CollectSourceFiles(
   std::map<std::string, cmSourceFile*>& cFiles,
   std::set<std::string>& otherFiles)
 {
-  auto cm = this->GlobalGenerator->GetCMakeInstance();
-
   std::string projectType;
   switch (gt->GetType()) {
     case cmStateEnums::EXECUTABLE: {
@@ -227,19 +225,18 @@ std::string cmExtraCodeLiteGenerator::CollectSourceFiles(
       gt->GetSourceFiles(sources,
                          makefile->GetSafeDefinition("CMAKE_BUILD_TYPE"));
       for (cmSourceFile* s : sources) {
-        // check whether it is a C/C++/CUDA implementation file
-        bool isCFile = false;
-        std::string lang = s->GetLanguage();
-        if (lang == "C" || lang == "CXX" || lang == "CUDA") {
-          std::string const& srcext = s->GetExtension();
-          isCFile = cm->IsSourceExtension(srcext);
-        }
-
+        // check whether it is a source or a include file
         // then put it accordingly into one of the two containers
-        if (isCFile) {
-          cFiles[s->GetFullPath()] = s;
-        } else {
-          otherFiles.insert(s->GetFullPath());
+        switch (cmSystemTools::GetFileFormat(s->GetExtension().c_str())) {
+          case cmSystemTools::C_FILE_FORMAT:
+          case cmSystemTools::CXX_FILE_FORMAT:
+          case cmSystemTools::CUDA_FILE_FORMAT:
+          case cmSystemTools::FORTRAN_FILE_FORMAT: {
+            cFiles[s->GetFullPath()] = s;
+          } break;
+          default: {
+            otherFiles.insert(s->GetFullPath());
+          }
         }
       }
     }
@@ -679,7 +676,11 @@ std::string cmExtraCodeLiteGenerator::GetSingleFileBuildCommand(
   std::string generator = mf->GetSafeDefinition("CMAKE_GENERATOR");
   if (generator == "Unix Makefiles" || generator == "MinGW Makefiles") {
     std::ostringstream ss;
-    ss << make << " -f$(ProjectPath)/Makefile $(CurrentFileName).cpp.o";
+#if defined(_WIN32)
+    ss << make << " -f$(ProjectPath)/Makefile -B $(CurrentFileFullName).obj";
+#else
+    ss << make << " -f$(ProjectPath)/Makefile -B $(CurrentFileFullName).o";
+#endif
     buildCommand = ss.str();
   }
   return buildCommand;