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
的情况下直接生成可执行程序。但我不喜欢这样。
答案 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