如何使用模块为Fortran编写makefile?

时间:2016-05-01 18:36:59

标签: makefile fortran

gg=mpif90
DEPS=matrix.mod
OBJ=  main.o sub1.o

main.out: $(OBJ)
    $(gg) -o $@ $^
%.mod:%.90 %.o
    $(gg) -c -o $@ $^

%.o:%.f90 $(DEPS)
    $(gg) -c -o $@ $^

.PHONY: clean

 clean:
    -rm -f *.o *~

看。主程序为main.f90sub1.f90将调用main.f90。两者都将使用matrix.f90这是一个模块。我知道我可以在没有compile then link的情况下直接生成可执行程序。但我不喜欢这样。

1 个答案:

答案 0 :(得分:1)

mod文件只是编译%.o的副产品,您不应在此使用-o $@,将其更改为

%.mod: %.90
    $(gg) -c  $^

这适用于大多数情况,但不是全部。那是因为mod文件的名称仅取决于模块名称,它与源文件名无关。所以最安全的方法是明确指定依赖关系。

matrix.mod: matrix.f90
    $(gg) -c matrix.f90

有时一个f90源文件可以包含两个或更多模块。

matrix33.mod matrix99.mod: matrix.f90
    $(gg) -c matrix.f90