I'm looking for a good and easy in maintenance portable build system for C++ projects. Main platforms should include Windows (Visual Studio 8+) and Linux (gcc); Cygwin may be an advantage. We're considering two main possibilities: CMake and Boost.Jam. SCons can be also an option, but I haven't investigated it yet. CMake and Boost.Jam seem to have the following traits:
CMake:
Boost.Jam:
What are other possibilities and what is really preferable after experience? What build systems can create a solution on the way?
(-) demands a configuration file in every project folder
This is not correct, you just need to pass bigger pathes like:
add_program(foo src/foo.cpp src/main.cpp)
Few notes, about Boost.Jam - first it is not Boost.Jam - bjam on its own quite useless, what you are looking for is Boost.Build which is set of Jam macros that make bjam useful.
Now, I worked with both, and I must admit, Boost.Build is not suitable for any serious projects outside the Boost itself. Need to find library? Can't need to find header? Can't. Need to do something outside of simple build - and you have not idea how to do it as BB documentation... Totally useless and maybe cover 10% of BB. So most of cases you need to ask questions in BB mailing lists and...
So, if you have some complicated project - and you need to make something more then simple compile and link, stay away from Boost.Build.
So if you need to support MSVC I find today CMake as only feasible choice.
I don't tell that CMake is very good system, it has many problems but it is something mostly suitable for cross platform development (if you need to support MSVC).
And if you don't care about MSVC and happy with MinGW... take a look on autotools as well.
About Scons - it is still less mature them CMake.