Просмотр исходного кода

GHS: List predefined targets before user targets in GUI

Fred Baksik 3 лет назад
Родитель
Сommit
93c1acd8ff
2 измененных файлов с 17 добавлено и 4 удалено
  1. 16 3
      Source/cmGlobalGhsMultiGenerator.cxx
  2. 1 1
      Source/cmGlobalGhsMultiGenerator.h

+ 16 - 3
Source/cmGlobalGhsMultiGenerator.cxx

@@ -317,8 +317,14 @@ void cmGlobalGhsMultiGenerator::WriteTopLevelProject(std::ostream& fout,
   }
 }
 
-void cmGlobalGhsMultiGenerator::WriteSubProjects(std::ostream& fout)
+void cmGlobalGhsMultiGenerator::WriteSubProjects(std::ostream& fout,
+                                                 bool filterPredefined)
 {
+  std::set<std::string> predefinedTargets;
+  predefinedTargets.insert(this->GetInstallTargetName());
+  predefinedTargets.insert(this->GetAllTargetName());
+  predefinedTargets.insert(std::string(CHECK_BUILD_SYSTEM_TARGET));
+
   // All known targets
   for (cmGeneratorTarget const* target : this->ProjectTargets) {
     if (target->GetType() == cmStateEnums::INTERFACE_LIBRARY ||
@@ -328,7 +334,13 @@ void cmGlobalGhsMultiGenerator::WriteSubProjects(std::ostream& fout)
          target->GetName() != this->GetInstallTargetName())) {
       continue;
     }
-    fout << target->GetName() + ".tgt" + FILE_EXTENSION << " [Project]\n";
+    /* Check if the current target is a predefined CMake target */
+    bool predefinedTarget =
+      predefinedTargets.find(target->GetName()) != predefinedTargets.end();
+    if ((filterPredefined && predefinedTarget) ||
+        (!filterPredefined && !predefinedTarget)) {
+      fout << target->GetName() + ".tgt" + FILE_EXTENSION << " [Project]\n";
+    }
   }
 }
 
@@ -454,7 +466,8 @@ void cmGlobalGhsMultiGenerator::OutputTopLevelProject(
   top.SetCopyIfDifferent(true);
   this->WriteTopLevelProject(top, root);
   this->WriteTargets(root);
-  this->WriteSubProjects(top);
+  this->WriteSubProjects(top, true);
+  this->WriteSubProjects(top, false);
   top.Close();
 }
 

+ 1 - 1
Source/cmGlobalGhsMultiGenerator.h

@@ -101,7 +101,7 @@ private:
   void WriteTopLevelProject(std::ostream& fout, cmLocalGenerator* root);
   void WriteMacros(std::ostream& fout, cmLocalGenerator* root);
   void WriteHighLevelDirectives(std::ostream& fout, cmLocalGenerator* root);
-  void WriteSubProjects(std::ostream& fout);
+  void WriteSubProjects(std::ostream& fout, bool filterPredefined);
   void WriteTargets(cmLocalGenerator* root);
   void WriteProjectLine(std::ostream& fout, cmGeneratorTarget const* target,
                         std::string& rootBinaryDir);