求gfortran编译器生成/不生成.mod文件的规则说明文档
gfortran模块编译行为的文档线索求助
使用gfortran -c my_module.f90编译含模块的文件my_module.f90时,修改文件后会出现两种编译行为:
- 若仅修改子程序/函数的内部实现,原型(接口定义)未发生变化,编译仅生成
my_module.o文件 - 若子程序/函数的原型(比如参数类型、个数、返回值类型等)发生变更,编译会同时生成
my_module.mod和my_module.o文件
这种特性很实用:在Makefile中可以利用它避免重新编译所有依赖该模块的文件,只需要重新链接即可。附对应的Makefile示例:
.SUFFIXES: FC=gfortran LD=gfortran F90MODSRC = my_module.f90 F90SRC = main.f90 F90OBJ = $(F90MODSRC:%.f90=%.o) $(F90SRC:%.f90=%.o) F90MOD = $(F90MODSRC:%.f90=%.mod) my_pgm : $(F90OBJ) $(LD) -o $@ $+ $(F90MOD):%.mod: %.f90 $(F90OBJ): %.o: %.f90 $(FC) -c $< main.o: my_module.mod .PHONY: clean clean: -rm -f $(F90OBJ) $(F90MOD) my_pgm
目前找不到gfortran官方文档中说明编译器如何区分这两种情况的内容,希望能得到相关线索。
内容的提问来源于stack exchange,提问作者Stef1611
相关产品推荐
相关产品推荐

