Module Fortran与Intel ifort的文件依赖关系
我使用英特尔Fortran 2012编译器在标准Unix环境中工作。 因为我的代码有一些旧的Module Fortran与Intel ifort的文件依赖关系,module,makefile,fortran,fortran90,Module,Makefile,Fortran,Fortran90,我使用英特尔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
.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 $@
有办法解决这个问题吗?假设您有一个依赖于
mod_here.f90
的there.f
文件,您可以在makefile中声明以下内容:
there.o: mod_here.o
$(FC) $(FC_FLAG) -c there.f -o there.o
当makefile到达该文件时,there.f
,它将看到它依赖于尚未编译的mod_here.f90
,因此它将编译它。添加
f77_file_with_module_dependency.o: f90_file_for_module.o
由于
使用模块对Tran77无效,为什么/如何获得依赖于.f90
文件中定义的模块的.f
文件?如果您有依赖于其他文件的文件,则需要使用先决条件信息告知make。这在任何方面都不是fortran所特有的。@EtanReisner在这种特殊情况下,假设我们只有一个这样奇怪的.f文件,你能提出一个好的方法来处理它吗?没有理由重复构建文件的规则,他只需要指定的prereq。@EtanReisner:News to me:D。我通常按照我发布的方式来做,从未想过在没有再次宣布规则的情况下尝试它。
f77_file_with_module_dependency.o: f90_file_for_module.o