On Mon, May 14, 2007 at 11:05:24PM +0200, Bram Moolenaar wrote:
>
> Hmm, in my POV a rule like:
>
> target: one two three
>
> means that "one", "two" and "three" are build in sequence, not at the
> same time.
This means `one', `two' and `three' have to be built for
`target'. More precisely any commands necessary to build
any of `target's prerequisites will be fully executed before
any commands necessary to build the target. The order is
chosen with regard to the full dependency tree:
all: a b c
a: c
@echo a
b:
@echo b
c: b
@echo c
Single-job make has no reason to reorder the prerequisites
once they are fully resolved, but AFAIK it is free to. GNU
make even has a special construct to specify the order of
build without implying dependency. BSD make OTOH has a `be
backward compatible' option to enforce building in
dependency order (it is on by default in single-job
invocations). Both will give you
b
c
a
from Makefile
all: a b c
a:
@sleep 3
@echo a
b:
@sleep 1
@echo b
c:
@sleep 2
@echo c
when run with enough jobs.
> I suppose adding the "-jN" argument changes the semantics of
> the Makefile, and that causes it to break.
If there ever was such semantics. I've yet to see a make
specification that precisely defines the build order of
independent targets.
> The Vim makefile was written for a common version of all make programs.
> So that it builds nearly everywhere. I'm not sure supporting "-jN" is
> possible without breaking it for some system. Or including false
> dependencies.
Maybe, although non-working -jN often indicates missing real
dependencies.
Anyway, if one neither knows he cannot use -jN nor that he
can run make without running configure first -- which I
suppose characterizes most people -- it works. And with
independent dependencies that rewrite the same file with
different content it probably cannot be fixed.
> I know, in my view "make" should do everything. Somehow people have
> accepted that some part of the building should be done separately, with
> the excuse that it's called configuration. Big mistake in my opinion.
There's nothing wrong on acknowledging there are inherent
chicken-egg problems and breaking the cycle explicitly.
Yeti
--
http://gwyddion.net/