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.f90
。 sub1.f90
将由main.f90
调用。两者都将使用matrix.f90
这是一个模块。我知道我可以直接生成可执行程序,而无需compile then link
。但是我不喜欢那样。 最佳答案
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
关于makefile - 如何使用模块为Fortran编写Makefile?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36970443/