makefile和混合Fortran和Fortran 90代码

时间:2016-02-05 15:47:09

标签: makefile fortran fortran90

我正在尝试更新一些旧的Fortran代码,我想使用makefile来构建它。现在,我的makefile看起来像

FC = gfortran
FFLAGS = -O2

HDRS = global.h param.h coor.h
SRCS = xxx.f yyy.f zzz.f newstuff.f90 main.f
OBJS = $(SRCS:.f=.o)
OBJS := $(OBJS:.f90=.o)

runit: $(OBJS)
        $(FC) $(FFLAGS) -o $@ $^

xxx.o yyy.o main.o : global.h
yyy.o zzz.o: coor.h
xxx.o yyy.o zzz.o main.o : param.h
xxx.o main.o : newstuff.o

clean:
        rm runit *.o *.mod

.SUFFIXES: .f .f90 .o

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

我有两个问题。首先,我编辑newstuff.f90,然后发出make newstuff.o,期待一个新的newstuff.o。相反,我得到的消息是newstuff.o是最新的。任何其他源代码都不会发生这种情况。我该怎么做才能说服newstuff.o确实已经过时了?

其次,尝试破解修复,我插入了行(上面没有显示):newstuff.o : newstuff.f90。但是使用makefile中的那一行,make返回

m2c    -o mpi_wrapper.o mpi_wrapper.mod
make: m2c: No such file or directory

为什么要使用其他实用程序m2c,无论是什么?我怎么说服它使用gfortran?感谢。

1 个答案:

答案 0 :(得分:1)

有一个默认规则将 mod 文件视为 Modula 文件。您可以通过在 Makefile 中添加以下行和空行来禁用此规则:

%.o : %.mod