Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 2 Mar 2011 13:42:23 +0000
From:      Anton Shterenlikht <>
Cc:        Anton Shterenlikht <>,
Subject:   Re: GNU make doesn't understand .for? suffix rules obsolete?
Message-ID:  <>
In-Reply-To: <>
References:  <>

Next in thread | Previous in thread | Raw E-Mail | Index | Archive | Help
On Wed, Mar 02, 2011 at 01:27:22PM +0000, b. f. wrote:
> > In particular I was surprised
> > to find out that GNU make considers
> > suffix rules obsolete:
> >
> >
> > I didn't think the suffix rules are
> > obsolete in BSD make, are they?
> >
> No (Although maybe some people will argue that BSD make itself is obsolete...).
> But what does it matter -- gnu make still understands them, doesn't it?

It seems the way suffix rules are impemented differs.
E.g. this construct

.SUFFIXES: .f90 .o

.f90.o: $(AUX).mod
	$(FC) $(FFLAGS) -c $<

meaning "compile all fortran files into objects, and
make sure $(AUX).mod file exists and up to date"
works in BSD make, while GNU make:

Suffix rules cannot have any prerequisites of their own. If they have any, they are treated as normal files with funny names, not as suffix rules. Thus, the rule:

     .c.o: foo.h
             $(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $<

tells how to make the file .c.o from the prerequisite file foo.h, and is not at all like the pattern rule:

     %.o: %.c foo.h
             $(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $<

which tells how to make `.o' files from `.c' files, and makes all `.o' files using this pattern rule also depend on foo.h.
*end quote*

> There are some implicit rules, and variable expansions can be used,
> but many of the GNU constructs are not supported. See make(1), and:

Thanks for pmake, but I think I'll try
instead to use as simple constructs as I can.

> You can limit yourself to constructs common to both makes,

yes, will try.

Many thanks

Anton Shterenlikht
Room 2.6, Queen's Building
Mech Eng Dept
Bristol University
University Walk, Bristol BS8 1TR, UK
Tel: +44 (0)117 331 5944
Fax: +44 (0)117 929 4423

Want to link to this message? Use this URL: <>