As it
turns out, I have been researching this issue recently for a C++ project I am
working on (some related research for a smart pointer implementation led me
to run across Boost and start paying attention to what you' all are up to
:-). Anyway, one of the key goals for the project is cross-platform (NT
and various Unix/Linux flavors) and cross-compiler (probably g++ and vcc)
compatibility. Of course, we also want a fully automated build and test
system so that we can rapidly detect and fix any changes which create porting
issues. Unfortunately, none of this is really easy or
"lightweight".
So
far, it looks like the best answer incorporates 2 "tools". For the build part,
use IMake to simplify makefile creation and factor out vendor and platform
specific configurations. In a nutshell, Imake uses macros and template
files to allow you to write one file (the IMakefile) and generate Makefiles for
all the variations. You can find info on Imake at http://www.primate.wisc.edu/software/imake-stuff/.
I have used Imake on a rather large C++ project (more than 200 people), and it
worked quite nicely once it was set up. The other main alternative I have
seen is to just maintain by hand Makefiles for every platform / compiler. This
is what seems to have been done on ACE, and I
hear it makes it really difficult to add files, remove files, reorganize
directories, etc.
The
other part of the equation is to automate testing using CppUnit from http://www.xprogramming.com/.
CPPUnit is derived from work done by Kent Beck on testing frameworks which
spawned. Of course CPPUnit is already fractured along compiler and
platform lines as you can see from the download page. However, if you dump
the GUI, the framework is trivial to port. Anyway, the idea is that a
single command can test everything and report the results in the form of
pass/fail statistics and diagnostic pointers for any failures. Again, as
an example, while ACE doesn't use CppUnit, it does have a consistently written
set of tests which allow rapid validation.
Jeff
Who has a proper build setup for running tests
on boost with various
compiler/stdlib combinations? I have been
piggybacking off of a gargantuan,
disgusting make system we use for a
project at work, but that's getting to
be much less practical as I try to
push forward into more experimental
territory. We need a solution for this!
Suggestions?
-Dave