Module Fortran与Intel ifort的文件依赖关系

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

我使用英特尔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 $@

有办法解决这个问题吗?

假设您有一个依赖于
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