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 *~
Run Code Online (Sandbox Code Playgroud)
看。主要程序是main.f90. sub1.f90将被调用main.f90。两者都将使用matrix.f90which 是一个模块。我知道我可以直接生成可执行程序而无需compile then link. 但我不喜欢那样。
该mod文件只是编译的副产品%.o,你不应该-o $@在这里使用,将其更改为
%.mod: %.90
$(gg) -c $^
Run Code Online (Sandbox Code Playgroud)
这适用于大多数情况,但并非全部。这是因为文件名mod仅取决于模块名称,与源文件名无关。因此,最安全的方法是显式指定依赖关系。
matrix.mod: matrix.f90
$(gg) -c matrix.f90
Run Code Online (Sandbox Code Playgroud)
有时一个f90源文件可以包含两个或多个模块。
matrix33.mod matrix99.mod: matrix.f90
$(gg) -c matrix.f90
Run Code Online (Sandbox Code Playgroud)