[jamming] Re: [jamboost] bjam vs scons vs cmake vs ...

David Abrahams david.abrahams at rcn.com
Wed Feb 26 17:41:23 PST 2003

"Oliver Schoenborn <oliver.schoenborn at nrc.ca>" <oliver.schoenborn at nrc.ca> writes:

> Sorry if this is not the right forum for this... Would anyone be able 
> to list a few distinguishing features of bjam that made it a better 
> choice than cmake, scons or other non-make descendants? I couldn't 
> find any info of this nature in the boost.build online docs. Thanks 
> in advance, 
> Oliver

I think each system has its own advantages and disadvantages;
Boost.Build is only a better choice than others if your needs
correspond with its strengths.  That said, I can draw some very broad
distinctions between Boost.Build, Perforce Jam, and Scons.  Natural
I'll say more about Boost.Build; I hope representatives of other
systems will correct me if I make a mistake here.

Perforce Jam is a basic build system with a (comparitively speaking)
very weak interpreted language on top of it.  It is designed as a
replacement for make, which it improves on in several ways, among them
by adding a more powerful and understandable imperative language, a
nice syntax for specifying targets, and eliminating the need for
recursive make invocations in large projects.

Boost.Build is designed for high-level build configuration: you
describe targets and their relationships in platform- and
toolset-independent terms, and the build system takes care of the
nitty-gritty details of selecting toolset-specific compiler flags,
adjusting for the fact that some platforms' shared libraries need to
be used with import libraries while others' do not, etc.  Another
feature is that you can ask to build with multiple configurations
simultaneously (e.g. to test with several toolsets).  Targets may
"propagate" properties such as #include paths or #defines which are
needed by their dependent targets.  There are many more features along
these lines, designed to handle the details of build configuration for
you.  The underlying build tool (bjam) builds upon Perforce Jam with
language extensions such as a module system, argument list
declaration, etc., which are valuable in constructing any large,
reliable software system.  The underlying dependency analysis/build
engine is very similar to what is found in Perforce Jam.

Scons began by geting the underlying build engine right; they work
hard to make sure that in a multiprocessor parallel build system, the
absolute maximum amount of parallelism is used, and that absolutely no
files are rebuilt unless they need to be.  It started out aimed at
roughly the same level of build specification as Perforce Jam, though
they have gradually been getting more high-level.  I don't think
they're quite at the level of Boost.Build yet, especially not v2 which
is nearing release.  Scons is built on Python, which is more powerful
and expressive than the Boost.Jam language for most jobs.  However,
since the Perforce Jam language was designed to make minimal build
specification easy (e.g. no quotes needed around most filenames),
Scons is still slightly less-slick for the user to write build
specifications in.  If they are comfortable with Python, though, that
may be a non-issue.

Dave Abrahams
Boost Consulting

More information about the jamming mailing list