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/

Reply via email to