Kaynağa Gözat

cmGlobalNinjaGenerator: avoid cleandead and recompact in Ninja-Multi

Fixes: #20247
Ben Boeckel 5 yıl önce
ebeveyn
işleme
6cc74b6140
1 değiştirilmiş dosya ile 11 ekleme ve 2 silme
  1. 11 2
      Source/cmGlobalNinjaGenerator.cxx

+ 11 - 2
Source/cmGlobalNinjaGenerator.cxx

@@ -552,10 +552,19 @@ void cmGlobalNinjaGenerator::Generate()
     }
   };
 
-  if (this->NinjaSupportsCleanDeadTool) {
+  // The `cleandead` tool needs to know about all outputs in the build we just
+  // wrote out. Ninja-Multi doesn't have a single `build.ninja` we can use that
+  // is the union of all generated configurations, so we can't run it reliably
+  // in that case.
+  if (this->NinjaSupportsCleanDeadTool && !this->IsMultiConfig()) {
     run_ninja_tool({ "cleandead" });
   }
-  if (this->NinjaSupportsUnconditionalRecompactTool) {
+  // The `recompact` tool loads the manifest. As above, we don't have a single
+  // `build.ninja` to load for this in Ninja-Multi. This may be relaxed in the
+  // future pending further investigation into how Ninja works upstream
+  // (ninja#1721).
+  if (this->NinjaSupportsUnconditionalRecompactTool &&
+      !this->IsMultiConfig()) {
     run_ninja_tool({ "recompact" });
   }
   if (this->NinjaSupportsRestatTool) {