Boost logo

Boost-Build :

From: Reece Dunn (msclrhd_at_[hidden])
Date: 2005-09-20 08:47:20

David Abrahams wrote:
>Kevin Wheatley <hxpro_at_[hidden]> writes:
> > David Abrahams wrote:
> >> On the Boost.Build list we were just discussing the fact that some
> >> people otherwise inclined towards Boost have chosen Scons over
> >> Boost.Build. It would be useful for us to understand some of the
> >> reasons why, if some of you wouldn't mind letting us know. No flames,
> >> please!
> >
> > not a flame, but some test results (Noel Llopis' Blog) shows a few
> > interesting results:
> >
> > (
> >
> > These are updated from previously.
>Wow, harsh. The numbers aside, I think his commentary is rather

I thought it was harsh as well. Here are a few comments:

Ant/Rant outperform Jam on full builds even though he claims Jam is the
fastest performing build system.

BBv2 and SCons are aimed at being truely platform independant, i.e. one
script will work for everything, whereas the others need work on your part
to get that or only support one target.

I agree with him that there is a learning curve when learning Jam/BBv2, but
you get this with learning any new language. He says to avoid BBv2/SCons
because of performance, but performance is only one factor. [As a note, how
much of a performance penalty is there from BBv2 and SCons being built on
top of and run from a scripting engine?]

What I like about BBv2 is that I can create a hello world application in 1
minute! The jam file:

exe hello : hello.cpp ;
install . : hello ; # copy hello.exe to this directory


#include <iostream>
int main()
std::cout << "Hello World!" << std::endl;
return 0;

and most of that is writing hello.cpp! With this, I can now build debug and
release versions - and build on any supported C++ compiler/platform - as
easily as changing the command line, BBv2 takes care of the rest. Make and
Jam don't give you this out of the box.

I have lost count of the number of times I have run into problems with
incorrect project settings for MSVC projects, most of which are due to the
IDE defaulting to the current configuration (debug or release) instead of
editing all configurations.

BBv2 (and I assume SCons has this as well) allows you to set project wide
settings (e.g. include paths) that are inherited by all targets in this
directory and below. You can't do this with the other build tools as far as
I am aware, or doing so is complex and unmaintainable.

Also, BBv2 (and SCons?) works out the build dependancies for you based on
how targets are associated, so if you add another dependancy on one of the
targets, you don't need to change the build order as you would in *Ant.
(MSVC does dependancy analysis, but only for the current solution and you
can't nest solution files).

It would be interesting to have more data from large build projects and
timing/profile data for these. Q: Is it possible to get profiling data for
bjam and BBv2 to see what parts of bjam and BBv2 are taking the most time.

Also, I don't believe that BBv2 has incremental build support. I wonder what
this and pre-compiled header support would do to the timing data.

- Reece


Boost-Build list run by bdawes at, david.abrahams at, gregod at, cpdaniel at, john at