link: "Recursive Make Considered Harmful"
christopher at nu.org
Mon Jan 10 23:25:13 PST 2005
On Tue, Jan 11, 2005 at 07:53:54AM +0100, Jeroen Ruigrok/asmodai wrote:
flaws. Any new build tool, again in my opinion, needs to cut back on the
'programming' aspect of the build files and allow people to get their
recipes working quickly.
I fully agree.
I consider jam to be a step in the right direction.
I'll consider that a recommendation to have to look into jam.
I have to do clever conditional stuff. Especially when I am first
bootstrapping my compiler and then recompiling with said just compiled
bootstrapped compiler. This needs on the fly readjustment of my CFLAGS and
linking options. And then I even split out stuff into bootstrap.mk and
But how much of this cleverness needs to be done by run-time
calculation? Using a different *.mk file for different invocations
isn't the naughty thing I was talking about, unless your makefile
recurses using both of them at different times, or loops, or ...
Given a versatile program, you are bound to run into users who will use some
of the declarative and some of the non-declarative features.
Agreed. Although I bemoan the amount of non-declarative stuff in the
typical usage of make these days, because I don't think it's all
justified, I would also feel quite straightjacketted if I couldn't use
it when I thought it was justified.
What would be nice is a way to do all the fancy stuff up front, and
produce a declarative description of what needs to be done.
Unfortunately, the easiest way to work out what make would do is to
get make to do it.
I don't like all the GNU autocrap stuff, which supposedly does some of
what I want, at least partly because the resulting Makefiles are still
not fully declarative.
[I guess it's like my attitude to C++ - it was a good language before
it grew fat, and now people feel they have to use feature X, even
though feature Y is cheaper both size- and time-wise, and can do the
same things X was used for. A company I worked for rewrote some
templated C++ into C. The resulting binary was only 1/10 the size,
and far easier to maintain - the problem wasn't so much the tool as
inappropriate usage of the bells and whistles.]
More information about the Kernel