Oh god, this way lies madness. :) It really does. Once you get beyond a fairly low level of complexity, there will be maintainence problems: It will take you too long to get it right, it will be impossible to figure out when something goes wrong, and you'll drive the next poor developer crazy if he doesn't have a complete knowlege of make (which is most of us). Yes, sometimes it may be neccesary to do this if you want to reuse some rules and functions but modify them under different conditions, AND you are restricted to doing it all in the Makefile (rather than preprocessing, calling out to external scripts, etc.)
mturmon|14 years ago
I used this mechanism to automate a pipeline for scientific data. The template (the "define...endef" block) held several rules needed to re-make results for one granule of data. When you ran make, it looked for all source granules, and a foreach() mapping the template across the source granules, just as in the OP, set up rules for each one.
Then you could dump a new source granule in a directory, run make -j 8, and get parallel "builds" of the results for free.
As long as it's documented, it can save a lot of repetition.
Not coincidentally, jgc has a nice article on make debugging ;-)
http://drdobbs.com/article/print?articleId=197003338&sit...
reedhedges|14 years ago
ArbitraryLimits|14 years ago
(I'm not saying generating the rules from code in a real build system wouldn't be a good idea, jut that it isn't with make.)