Gone is the build-system-maintenance-nightmare
OK, to be honest: It isn’t quite gone. But it’s become very small, and no longer a nightmare.
You ask why? Because it now operates automagically.
You ask how? By deducing what directories contain relevant sources, by finding out where the include directives are located, by compiling all sources it can (or is allowed to) find, and create an executable for that. Or more than one. Or a library.
You ask where? Well, here: http://www.bezem.de/i_make.html
I’ve started documenting a make structure based on GNU make, with little else in form of utilities (one of my own will be presented with full source code), automating most of the build process itself.
- platform-independent using GNU make
- no more makefile-maintenance to add files or directories
- multiple versions in one project tree, keeping the sources together while separating the intermediate files as well as the results
- full dependency checking included, automatically
- dependencies between directories can be indicated and will be observed
- hardly slower than running a flat makefile, just as fast as a normal recursive make
OK, where’s the catch, you ask? No catch. This system has been up and running in at least three development locations, on Solaris, HP-UX, AIX, Windows 2000, Windows XP, with and without Cygwin, using a variety of compilers (including GCC and Microsoft VC++), with implementations for various assembler languages, C, C++, lex/yacc and IDL.
If there is a catch it is this: I’ve now started documenting the system and the concepts in a way for developers to understand the reasoning (I have documentation on the innards as well as for the user, but too specific for publication), and for others to tailor the ideas to their environments, if necessary. And, sadly, that work has just started.
The first installment is online, illustrating how GNU make can find the directories intended to be included in the build by looking (recursively, with arbitrary depth) for directories containing a file called ‘Makefile’, and illustrating how to represent dependencies between sibling-directories that even will be honored by parallel-make.
Maybe not much, but then, more is to come, so register here, or watch the RSS!
Happy Making!
Johan
Deutsch
English
Nederlands