Selaa lähdekoodia

Ninja: Do not clean metadata when re-generating inside a running build

When `ninja` re-runs CMake to re-generate the build system, do not try
to use the ninja tools to update metadata on Windows.  The outer ninja
process is already holding the files open.

Issue: #20274
Brad King 5 vuotta sitten
vanhempi
sitoutus
ccaa0bccc4
1 muutettua tiedostoa jossa 9 lisäystä ja 1 poistoa
  1. 9 1
      Source/cmGlobalNinjaGenerator.cxx

+ 9 - 1
Source/cmGlobalNinjaGenerator.cxx

@@ -528,7 +528,15 @@ void cmGlobalNinjaGenerator::Generate()
   this->CloseRulesFileStream();
   this->CloseBuildFileStreams();
 
-  this->CleanMetaData();
+#ifdef _WIN32
+  // The ninja tools will not be able to update metadata on Windows
+  // when we are re-generating inside an existing 'ninja' invocation
+  // because the outer tool has the files open for write.
+  if (!this->GetCMakeInstance()->GetRegenerateDuringBuild())
+#endif
+  {
+    this->CleanMetaData();
+  }
 }
 
 void cmGlobalNinjaGenerator::CleanMetaData()