Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 2 Mar 2011 13:42:23 +0000
From:      Anton Shterenlikht <mexas@bristol.ac.uk>
To:        bf1783@gmail.com
Cc:        Anton Shterenlikht <mexas@bristol.ac.uk>, freebsd-questions@FreeBSD.org
Subject:   Re: GNU make doesn't understand .for? suffix rules obsolete?
Message-ID:  <20110302134222.GB86263@mech-cluster241.men.bris.ac.uk>
In-Reply-To: <AANLkTimKi25ayCg9=oiPO04RzU9Qgd=RMkGqyove+U8B@mail.gmail.com>
References:  <AANLkTimKi25ayCg9=oiPO04RzU9Qgd=RMkGqyove+U8B@mail.gmail.com>

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:
> > http://www.gnu.org/software/make/manual/html_node/Suffix-Rules.html#Suffix-Rules
> >
> > 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:

*quote*
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:
> 
> http://www.freebsd.org/doc/en_US.ISO8859-1/books/pmake/index.html

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

-- 
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: <http://docs.FreeBSD.org/cgi/mid.cgi?20110302134222.GB86263>