diff options
author | Evan Martin <martine@danga.com> | 2011-02-04 05:36:01 (GMT) |
---|---|---|
committer | Evan Martin <martine@danga.com> | 2011-02-04 05:36:01 (GMT) |
commit | 231206b0b512d8850976fba3f9f16fc7c3872ebc (patch) | |
tree | 63288c48e7c13234f11f3dfda36d25eed6dec703 | |
parent | e5b4647a0f17a83314f2c8d534b1172d2300acae (diff) | |
download | Ninja-231206b0b512d8850976fba3f9f16fc7c3872ebc.zip Ninja-231206b0b512d8850976fba3f9f16fc7c3872ebc.tar.gz Ninja-231206b0b512d8850976fba3f9f16fc7c3872ebc.tar.bz2 |
use builddir for log file
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | manual.asciidoc | 13 | ||||
-rw-r--r-- | src/ninja.cc | 9 | ||||
-rw-r--r-- | todo | 2 |
4 files changed, 19 insertions, 6 deletions
@@ -6,4 +6,3 @@ TAGS /README.html /config.ninja /manual.html -.ninja_log diff --git a/manual.asciidoc b/manual.asciidoc index fd18200..f50d276 100644 --- a/manual.asciidoc +++ b/manual.asciidoc @@ -251,6 +251,19 @@ statement to the rule (for example, if the rule needs "the file extension of the first input"), pass that through as an extra variable, like how `cflags` is passed above. +The Ninja log +~~~~~~~~~~~~~ + +For each built file, Ninja keeps a log of the command used to build +it. Using this log Ninja can know when an existing output was built +with a different command line than the build files specify (i.e., the +command line changed) and knows to rebuild the file. + +The log file is kept in the build root in a file called `.ninja_log`. +If you provide a variable named `builddir` in the outermost scope, +`.ninja_log` will be kept in that directory instead. + + Generating Ninja files ---------------------- diff --git a/src/ninja.cc b/src/ninja.cc index 6e441b6..0547013 100644 --- a/src/ninja.cc +++ b/src/ninja.cc @@ -204,13 +204,16 @@ int main(int argc, char** argv) { build_log.SetConfig(&config); state.build_log_ = &build_log; + const string build_dir = state.bindings_.LookupVariable("builddir"); const char* kLogPath = ".ninja_log"; - if (!build_log.Load(kLogPath, &err)) { - fprintf(stderr, "error loading build log: %s\n", err.c_str()); + string log_path = build_dir.empty() ? kLogPath : build_dir + "/" + kLogPath; + if (!build_log.Load(log_path.c_str(), &err)) { + fprintf(stderr, "error loading build log %s: %s\n", + log_path.c_str(), err.c_str()); return 1; } - if (!build_log.OpenForWrite(kLogPath, &err)) { + if (!build_log.OpenForWrite(log_path.c_str(), &err)) { fprintf(stderr, "error opening build log: %s\n", err.c_str()); return 1; } @@ -7,8 +7,6 @@ website, contact info delete halfway-built output files when interrupted -put ninja_log somewhere useful and document it - frosting ======== |