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

cmLocalGhsMultiGenerator: Generate targets in dependency order

Use the globally computed target ordering so that we generate all
of a target's dependencies before generating the target itself.
Brad King 5 лет назад
Родитель
Сommit
69ee18163b
2 измененных файлов с 8 добавлено и 33 удалено
  1. 8 28
      Source/cmLocalGhsMultiGenerator.cxx
  2. 0 5
      Source/cmLocalGhsMultiGenerator.h

+ 8 - 28
Source/cmLocalGhsMultiGenerator.cxx

@@ -2,10 +2,8 @@
    file Copyright.txt or https://cmake.org/licensing for details.  */
 #include "cmLocalGhsMultiGenerator.h"
 
-#include <algorithm>
 #include <utility>
-
-#include <cmext/algorithm>
+#include <vector>
 
 #include "cmGeneratorTarget.h"
 #include "cmGhsMultiTargetGenerator.h"
@@ -29,34 +27,16 @@ std::string cmLocalGhsMultiGenerator::GetTargetDirectory(
   return dir;
 }
 
-void cmLocalGhsMultiGenerator::GenerateTargetsDepthFirst(
-  cmGeneratorTarget* target, std::vector<cmGeneratorTarget*>& remaining)
-{
-  if (!target->IsInBuildSystem()) {
-    return;
-  }
-  // Find this target in the list of remaining targets.
-  auto it = std::find(remaining.begin(), remaining.end(), target);
-  if (it == remaining.end()) {
-    // This target was already handled.
-    return;
-  }
-  // Remove this target from the list of remaining targets because
-  // we are handling it now.
-  *it = nullptr;
-
-  cmGhsMultiTargetGenerator tg(target);
-  tg.Generate();
-}
-
 void cmLocalGhsMultiGenerator::Generate()
 {
-  std::vector<cmGeneratorTarget*> remaining;
-  cm::append(remaining, this->GetGeneratorTargets());
-  for (auto& t : remaining) {
-    if (t) {
-      this->GenerateTargetsDepthFirst(t, remaining);
+  for (cmGeneratorTarget* gt :
+       this->GlobalGenerator->GetLocalGeneratorTargetsInOrder(this)) {
+    if (!gt->IsInBuildSystem()) {
+      continue;
     }
+
+    cmGhsMultiTargetGenerator tg(gt);
+    tg.Generate();
   }
 }
 

+ 0 - 5
Source/cmLocalGhsMultiGenerator.h

@@ -4,7 +4,6 @@
 
 #include <map>
 #include <string>
-#include <vector>
 
 #include "cmLocalGenerator.h"
 
@@ -37,8 +36,4 @@ public:
   void ComputeObjectFilenames(
     std::map<cmSourceFile const*, std::string>& mapping,
     cmGeneratorTarget const* gt = nullptr) override;
-
-private:
-  void GenerateTargetsDepthFirst(cmGeneratorTarget* target,
-                                 std::vector<cmGeneratorTarget*>& remaining);
 };