【发布时间】:2016-05-15 15:58:42
【问题描述】:
我正在尝试更新一些旧的 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。相反,我收到 newsstuff.o 是最新的消息。任何其他源代码都不会发生这种情况。我该怎么做才能说服 newstuff.o 确实过时了?
其次,尝试破解修复程序,我插入了以下行(上面未显示):newstuff.o : newstuff.f90。但是在 makefile 中使用该行,make 返回
m2c -o mpi_wrapper.o mpi_wrapper.mod
make: m2c: No such file or directory
为什么 make 会使用其他实用程序 m2c,不管它是什么?我如何说服它使用 gfortran?谢谢。
【问题讨论】:
-
Fortran 和 Fortran 90 的混合到底是什么? BTW
.f90并不意味着它是 Fortran 90(不幸的是)。 -
@Vladimir F 一些 Fortran 77 代码和一些新的 Fortran 90 代码。 Make似乎以不同的方式对待这两者。新代码使用模块,旧代码不使用。就 make 而言,这似乎是不同的。
-
m2c 是一个 Modula 编译器。 Make 认为 .mod 是 Modula 的源代码。你必须告诉 make 忽略
.mod文件。 -
我无法重现这个。你周围还有其他名为
newstuff*的文件吗?您使用的是哪个版本的 Make (make -v)? -
无法复制。请发帖MCVE
标签: makefile fortran fortran90