[llvm-dev] Prevent ninja from rerunning cmake in a new build directory

Don Hinton via llvm-dev llvm-dev at lists.llvm.org
Fri May 24 11:36:04 PDT 2019

Just posted this fix on ninja's github page, but figured I'd share it with
a larger audience.

Every time I run cmake && ninja in a new build directory, ninja will rerun
cmake because the entry for build.ninja in .ninja_log is older than the
timestamp on CMakeCache.txt, even if the timestamps on the actual file
isn't older.

The following patch fixes the problem, i.e., there's no need to add
build.ninja to the ninja_log:

diff --git a/src/ninja.cc b/src/ninja.cc
index a093cd1..810b22d 100644
--- a/src/ninja.cc
+++ b/src/ninja.cc
@@ -249,8 +249,6 @@ bool NinjaMain::RebuildManifest(const char*
input_file, string* err) {
     return false;

   Builder builder(&state_, config_, &build_log_, &deps_log_, &disk_interface_);
-  if (!builder.AddTarget(node, err))
-    return false;

   if (builder.AlreadyUpToDate())
     return false;  // Not an error, but we didn't rebuild.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20190524/61b2ec68/attachment.html>

More information about the llvm-dev mailing list