Jam is a software build tool that makes building simple things simple and building complicated things manageable. It has been developed by Christopher Seiwald at Perforce and then improved by various people over time. It is freely available as C source and is widely used to build commercial and academic software. Jam is a very good solution for conventional C/C++ compile-and-link builds.
Jam is somewhat comparable to Make, but it is a lot simpler to use than Make, it is far more powerful and easy to master. It already works on a large variety of platforms (Unix, Windows, Linux, MacOS, BeOS, etc.), it is trivial to port, and its design is sufficiently clear to allow any average programmer to extend it with advanced features at will. It also is a self-contained tool and does not require installation of any scripting languages or libraries. In fact, a Jam based build process can be bootstrapped only with a C compiler in the path.
Most importantly, Jam understands C/C++ dependencies, there is no need to declare header or object files. The built-in Jam rules handle header file dependencies and object files both automatically and on-the-fly. Before any targets are updated, Jam gathers complete dependency information for C/C++ source files.
All this allows Jam to: