Recently I stumbled over Boost.Build which is a build system for C++ projects.
Boost.Build is based on FT Jam which in turn is based on Perfoce Jam. I don't know, which feature has been added by whom. Nevertheless what Boost.Build offers you is really what you ever wanted as a C++ developer.
For me Makefiles are deprecated. Automatic dependency tracking and cleaning is a must. SCons was the first step into the right direction. But it lacks some features I don't want to miss any more.
The most important thing to me is that fact that you can state usage requirements. If for example a part of your project is a library which depends on some other, prebuild library, say openssl, you can specify; "hey, whoever uses this library should also link against openssl, too".
A second very handy feature is that different builds, say the debug and the release build, can be made at once into different target directories. This means for example that no frequent extra clean and rebuild is needed if you hunt a Heisenbug.
Read through the Boost.Build tutorial to receive an impression these and other features.
The major disadvantage of Boost.Build is the really ugly and cumbersome syntax. Besides, the current documentation leaves many questions open. Furthermore Boost.Build focuses on building C++ software. I have no experience with other languages, but I guess things won't fit nifty.