This is the mail archive of the fortran@gcc.gnu.org mailing list for the GNU Fortran project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Makefile with .mod files


On Nov 3, 2007, at 14:11:03, Ignacio Fernández Galván wrote:

--- FX Coudert <fxcoudert@gmail.com> wrote:

This is a change from 4.2, IIRC, and it was done because users
complained that .mod files had their timestamps updated while not
changing, which triggered massive useless recompilations because of
Makefile dependencies ;-)

Fair enough, I think that's OK


So, is there a solution for this?

Yes, I believe there is; the following Makefile seems to work fine:


all: a.o b.o

a.o: a.f90 b.mod
         gfortran -c $<

b.o: b.f90
         gfortran -c $<

b.mod: b.f90 b.o
         @true

a.mod: a.f90 a.o
         @true

It works... until one deletes the .mod files (which can happen by
accident), then make doesn't know how to build them. I guess I could
use something like "test -e $@ || gfortran -c $<" instead of "@true"...
Anyway, there is another (minor) problem: with that solution make still
thinks there is something to build and does not inform that everything
is up to date, even though it doesn't actually build anything.

Since .mod files and .o files are generated at the same time, I prefer the following:


all: a.o b.o

a.o: a.f90 b.o
	gfortran -c $<

b.o: f.90
	gfortran -c $<

Of course, in reality you use rules, so that would read:

all: a.o b.o

%.o: %.f90
	gfortran -c $*.f90

a.o: b.o

Finally, if you use GNU make you can also write:

a.o a.mod: a.f90
	gfortran -c $<

to indicate that both files are created. (At least I think this is possible; maybe it is only possible with rules instead of explicit targets, or there is another gotcha which I'm missing at the moment. As I said above, I don't usually mention .mod files in Makefiles.)

-erik

--
Erik Schnetter <schnetter@cct.lsu.edu>

My email is as private as my paper mail.  I therefore support encrypting
and signing email messages.  Get my PGP key from www.keyserver.net.



Attachment: PGP.sig
Description: This is a digitally signed message part


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]