bug-make
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[bug #33034] "Makefile:23: *** mixed implicit and normal rules. Stop." f


From: Paul D. Smith
Subject: [bug #33034] "Makefile:23: *** mixed implicit and normal rules. Stop." for Linux kernel out of source builds
Date: Sat, 12 Oct 2013 18:29:32 +0000
User-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.66 Safari/537.36

Follow-up Comment #18, bug #33034 (project make):

> That's disappointing.

I've already explained why.  Makefile syntax, unlike the C ABI where you can
always just define a new function, is not inherently extensible except in very
limited ways, and I'm not interested in creating ever more obscure syntactical
aberrations and/or adding tons of special backward-compatibility flags with
their attendant headaches.  In my opinion makefiles already have more than
enough syntactical foibles.  Take a look through the actual
backward-compatibility issues raised in the NEWS file.

Of course, this is open source so you're free to provide a version of GNU make
that _does_ provide these types of options for backward compatibility, if you
feel it's that important.

My opinion on backward-compat is that we make an effort to avoid
backward-incompatibilities and try to ensure they have the smallest possible
impact.  This change would likely have never been noticed if it hadn't
affected Linux, and it would not be a big deal (only 3 files needed to be
changed) except so many people apparently want to build old versions of the
kernel.  How many people go back and build OpenOffice 1.0 on their brand new
Ubuntu 14.04 systems, and so would care if the OpenOffice 1.0 makefiles no
longer worked with GNU make 4.0?

If you cannot change your makefiles to avoid the backward-compat issues, you
can always keep multiple versions of GNU make.  Unlike other tools like Java,
GCC, etc. make is a single, simple executable that can be placed anywhere you
want and named anything you want, and it will continue to work just fine. 
Take two, they're small!

> I'm curious what you infer that from.

Two things from the manual: first the description of pattern rules explicitly
describe what happens if you include a non-pattern prerequisite, but says
nothing about allowing a non-pattern target.  Second GNU make lists the
different types of lines in a makefile and none of those allows a mash-up of
implicit and explicit rules like this.

And two things from experience: if you write "foo bar%:" it works, but if you
write "bar% foo:" it fails with an error.  Also if you add a pattern
prerequisite "foo bar% : baz%" that also fails to work (the target 'baz%',
literally, is considered a prerequisite of the target 'foo').  Certainly any
syntactical rules _THAT_ obscure _WOULD_ be mentioned explicitly in the
manual, if this were intended to be a supported feature.

    _______________________________________________________

Reply to this item at:

  <http://savannah.gnu.org/bugs/?33034>

_______________________________________________
  Message sent via/by Savannah
  http://savannah.gnu.org/




reply via email to

[Prev in Thread] Current Thread [Next in Thread]