I'm looking at starting a new project in C++ - just in my own time initially - and I'm investigating the build systems that are available. It would appear that the answer is "Many, and they're all awful".
The features that I specifically need for this are:
- C++11 support
- Cross platform (Linux as main target, but able to build on at least Windows as well)
- Decent unit testing support
- Support for multiple modules for separating code out
- Support for code generation (Using asn1c or protobuf - not 100% sure yet)
- Easy to maintain
Now, I know I can do 1-4 of those using CMake and Autotools easily enough. Probably also with SCons and Waf and the couple of others too. The problem is that I've never worked out how to correctly do code generation using them - that is source files that do not exist until the build process is first run, so source files that the build system must be able to convert into executable code but doesn't actually know about until the build starts... (ASN1C in particular generates dozens of header and source files that must be able to work together, and the actual set of files generates depends on the contents of your asn file) There's also the fact that none of these are especially easy to maintain - CMake and Autotools have their own huge set of scripts that you need to manage for them to work, and Waf and Scons require that anybody working with them has decent knowledge of python (I don't) to work with them...
So - what build systems are recommended for something like this? Or will I be stuck with make files and shell scripts for now?