Waiting for unit compilations to finish during development, particularly with G++ and heavy optimizations can be quite time consuming.
A run of
make distcheck escalates the problem, because all files during a
dist need to be rebuilt. Small errors triggered late in the
dist build might require several time consuming restarts of the build process.
With ccache, a tool exists that can majorly speed up this process. I’ve been using it successfully for several years now. A related development aid is colorgcc which is a colorization wrapper for gcc. This also is under heavy use for my development. It turns out that some tweaks are needed to get it working together with ccache though.
Here’s how to use the tools in combination to speed up regular project builds and also
Get and install ccache. Wrapping compiler invocations with ccache will cache recompilations of the same units. ccache needs a directory to store the cache contents; this defaults to
~/.ccachewhich might not be the best choice for network homes or encrypted homes. Using
/tmpis also suboptimal since it is usually cleaned upon reboots. So I’d recommend to put this into your
This will retain the compiler cache across reboots in
Get and install colorgcc. Then some patching is in order, especially if you use multiple versions of gcc and need ccache integration. Based on colorgcc from Ubuntu-9.10, I’ve prepared a patch for this (it has been sent to Jamie Moyers some while ago) to be found here: http://testbit.eu/~timj/blogstuff/xyv-colorgcc.diffTo briefly summarize its effects:
This allows colorgcc to be used through a bunch of links, e.g. by creating:
ln -s colorgcc colorg++ ln -s colorgcc colorgcc-4.4 ln -s colorgcc colorg++-4.4
Invoking the script through those links will cause it to strip the '^color' prefix and invoke the respective compiler.
Using this patch,
/usr/bin/ccachewill be used to wrap the compiler invocation if it exists.
The patch also contains some UTF-8 quotation fixes needed for gcc-4.4 support.
Finally, the patch enables colorgcc to correctly deal with g++ error message that span multiple lines (e.g. template error messages).
Use colorgcc as a compiler replacement for project builds:
rm -f config.cache ./autogen.sh CC=colorgcc-4.4 CXX=colorg++-4.4 nice make all -j4
Use colorgcc as a compiler replacement for
CC=colorgcc CXX=colorg++ nice make all distcheck
Finally, you might want to tweak the colors of colorgcc’s output which can be adjusted in
/etc/colorgcc/colorgccrc. FYI, here’s the color setup I prefer to use in a black terminal window:
srcColor: bold white introColor: bold magenta warningFileNameColor: cyan warningNumberColor: bold cyan warningMessageColor: yellow errorFileNameColor: cyan errorNumberColor: bold cyan errorMessageColor: bold yellow
UPDATE: Fixed ccache default dir thanks to anonymous.