A build system with the following features:
- written in C++ and distributed in a single header file;
- processes a directed graph where the edge between any two nodes a, b is a function f such that f(a) = b, read as "f produced b from a";
- dependencies between two nodes a, b are described equivalently as dep(a) = b, read as "b is derived from a";
- all files generated by the build process either have an input source (possibly generated transitively) or a null input, in which case the function f(a) = b describes the generation of b, where a is null;
- files that are produced by the build process are distinguished from files that statically exist;
- for f(a) = b, where a statically exists, hash(a) is computed and cached and the cache is consulted for whether to compute f(a) to (re)create b;
- all input files must be explicitly references, no automatic search is done;
- each f(a) = b is described in a particular context which may include, for example, a compiler object, which in turn may describe header paths, compile flags, link flags, link libraries, link mode, etc.;
- implicitly parallel utilizing CPUs + 1 workers (overridable by environmental variables or command line options);
- intimately aware of C/C++ build requirements but as language agnostic as possible.
See the LICENSE file.