我在使用英特尔Fortran 2012编译器的标准Unix环境中工作。
由于我的代码有一些旧的.f
文件和一些较新的.f90
文件,因此makefile按以下结构组织,
f_sources= ... ...
f90_sources= ... ...
f_objects = $(patsubst %.f,%.o,$(f_sources))
f90_objects = $(patsubst %.f90,%.o,$(f90_sources))
$(f_objects): %.o: %.f
@echo compiling $<
$(FC) $(FC_FLAGS) -c $< -o $@
# compile f90 files:
$(f90_objects): %.o: %.f90
@echo compiling $<
$(FC) $(FC_FLAGS) -c $< -o $@
问题是,很少有奇怪的.f
文件依赖于某些.f90
文件中定义的模块,然后编译器似乎无法检测到依赖关系,因为我先编译所有.f
} files ...
Error in opening the compiled module file. Check INCLUDE paths.
有没有办法解决这个问题?
答案 0 :(得分:2)
添加
f77_file_with_module_dependency.o: f90_file_for_module.o
到你的Makefile。
答案 1 :(得分:0)
假设您有there.f
文件取决于mod_here.f90
,您在makefile中声明以下内容:
there.o: mod_here.o
$(FC) $(FC_FLAG) -c there.f -o there.o
当makefile到达此文件there.f
时,它将看到它依赖于尚未编译的mod_here.f90
,因此它将编译它。