Because make isn't especially good. There are dozens of alternatives, jam is one of them. There may well be even better ones around that we haven't seen.
Some of the things we particularly like about jam are:
Automatic dependencies. In jam, "make depend" is built in, and therefore works better than the glued-on make features.
Speed! Jam works quickly. It avoids unnecessary work (partly helped by its automatic dependencies) and uses SMP machines optimally, even running multiple compiles in different directories. Jam can sort the compiles such that failing compiles tend to come early. While we're working, we usually get our error messages within a couple of seconds, no matter how big the compile is.
Clean design. When building, jam first decides what needs doing, then does it. Only in the second phase are programs executed. This constrains the build system to some degree (for example, it's impossible to include a generated makefile), but the result is a system that builds cleanly and seldom has obscure unreproducible errors.
It can be tricky to chase down errors in jamfiles, but not as tricky as chasing down errors in ten-thousand-line autoconf-generated makefiles.
For further questions, please ask firstname.lastname@example.org.
Last modified: 2010-11-19