我正在尝试更新一些旧的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?感谢。
答案 0 :(得分:1)
有一个默认规则将 mod 文件视为 Modula 文件。您可以通过在 Makefile 中添加以下行和空行来禁用此规则:
%.o : %.mod