GNU make doesn't understand .for? suffix rules obsolete?

Anton Shterenlikht mexas at
Wed Mar 2 13:42:27 UTC 2011

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

More information about the freebsd-questions mailing list