# Battle Of The Build Systems

September 7, 2008

One of the underreported things about Google’s new Chrome browser is that SCons is used to build many of its modules. I chose SCons as the build system for libstrophe several years back, and was mostly quite happy. It is certainly a lot easier to get going than autotools and make. It seems that since I last looked, several new build systems have popped up.

## autotools

Everyone who’s built software for Linux is probably familiar with the configure script. The configure, make, and make install steps are simple and work well much of the time. However, the story is radically different for the poor developers who have to use the tools that generate the Makefile and configure script.

Using autotools is a giant pain, but it gets the job done.

## SCons

SCons came out of work done for the Software Carpentry Competition way back in 2000. It is a replacement for make along with functionality similar to automake and autoconf. It is written in Python, and it uses Python scripts for its input files, making it quite flexible and easy to understand.

It works well, but it doesn’t seem to be extremely active. Version 1.0 was finally released last month, but it took a long time to get there. The upside of this is stability, and the downside is lack of features. I recall being excited about the possibility of generating Microsoft DevStudio project files with it, but I cannot find any information on this anymore.

Check out the SCons team’s comparison page for their take on SCons versus the other choices.

## CMake

CMake is another alternative written in C++. It has a more traditional syntax than SCons, but its feature list is long and impressive. CMake generates native build system objects like Makefiles or Visual Studio .sln files.

The KDE project tried to switch from autotools to SCons and never quite made it. They ended up choosing CMake, and there is a good article at LWN about this transition.

## waf

waf is the newest one I have noticed, but it looks quite promising. Like SCons, it uses Python for its configuration files. Unlike autotools, it is apparently quite fast. It is also built to be distributed with your project to avoid people needing to install it as a dependency. SCons now has this as well. This means it will work out of the box on any system with Python pre-installed, which is everything but Windows, and perhaps py2exe would solve the Windows issue.

waf is quite interesting, and I will definitely be exploring it further. Using Python for the configuration files was very nice when I used SCons for libstrophe, so I’m glad to see that others are doing this as well.

The waf wiki has a comparison page which evaluations waf in context with autotools, CMake, SCons, and others. It makes for very interesting reading.

## Choices Are Good

It’s nice to finally have some good alternatives to the classic tools. I’ve already tried SCons with libstrophe, and I’m looking forward to giving waf and CMake a try the next time I’m experimenting.

:EXTENDED:

Battle Of The Build Systems - September 7, 2008 - Jack Moffitt