link: "Recursive Make Considered Harmful"

Jeroen Ruigrok/asmodai asmodai at
Mon Jan 10 22:56:21 PST 2005

-On [20050111 03:52], Christopher Vance (christopher at xxxxxx) wrote:
>scons is a DMT worth looking at: it uses a hierarchy (if you want) of
>files describing what needs to be done for making things, so you can
>have different flags, include directories, etc., where you need them,
>but the actual construction is done only at the top level,

Were it not for the syntactic mess that I think scons is.  Each 'makefile'
resembles raw Python so much I don't think it is worthwhile for people to
learn it.
It gives power to the user but at an, in my opinion, too extreme cost.  Make
was a nice program, but it has served its time by now and has fundamental
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 consider jam to be a step in the right direction.

Of course, scons dependency on Python does not help, since on most Unix
machines you can find Perl nowadays (but it is no guarantee), but Python
isn't that widespread (yet).  Of course, I fully will grant points for the
argument that not every Unix machine has a C compiler installed to initially
compile something like jam or a new make.

>I found when moving a (userspace and kernel) multi-OS project from a
>recursive (GNU) makefile scheme to scons that the line count dropped
>by 90% and the file count by even more.  I think it also built
>quicker, but didn't collect numbers to prove it.

That can very well be possible.

>My conclusion from having constructed recursive build systems (from
>scratch, so it's my own fault...) and then making them non-recursive,
>is that the main problem with recursive make is the way make is used:
>people keep trying to do non-declarative things, like autogenerating
>rules, multiple make invocations with different arguments, doing
>clever stuff conditional on run time things, etc.

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 and already.

>If we could only stick to the declarative subset of make, it would be
>much easier to collect a whole bunch of things from a directory
>hierarchy and process it nicely.
>If non-declarative stuff is necessary, it would be really nice to make
>all those decisions up front, and then invoke make (with the
>configuration just determined) to do the boring stuff.  Maybe then we
>could all win.

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.

Jeroen Ruigrok van der Werven <asmodai(at)> / asmodai / kita no mono
Free Tibet! |   |
After a silent, peaceful night, you took my Heart and slipped away...

More information about the Kernel mailing list