Module Fortran:在“头模块”中声明函数和子例程

Module Fortran:在“头模块”中声明函数和子例程,module,compilation,makefile,fortran,Module,Compilation,Makefile,Fortran,如何在单独的模块中声明函数和子例程,并在相应的非头模块中初始化它 我正在使用make进行编译: # All modules OBJS := $(BINDIR)/physics.o $(BINDIR)/particles.o # Build rules $(BINDIR)/%.o: $(VPATH)/%.f | $(BINDIR) $(FC) $(FFLAGS) -c $^ -o $@ $(BINDIR)/%.mod: runner: $(OBJS) 。。问题是,物理,依赖

如何在单独的模块中声明函数和子例程,并在相应的非头模块中初始化它

我正在使用make进行编译:

# All modules
OBJS        := $(BINDIR)/physics.o $(BINDIR)/particles.o

# Build rules
$(BINDIR)/%.o: $(VPATH)/%.f | $(BINDIR)
$(FC) $(FFLAGS) -c $^ -o $@

$(BINDIR)/%.mod: 

runner: $(OBJS)
。。问题是,物理,依赖于粒子的子程序,反之亦然。所以我不能仅仅改变这些文件的编译顺序

我得到这样的错误:

src/physics.f:105.23:

      use particles
                   1
Fatal Error: Can't open module file 'particles.mod' for reading at (1): No such file or directory
make: *** [bin/physics.o] Error 1

虽然还不完全清楚你打算做什么,但在我看来,你是在寻找。
不幸的是,编译器目前并不广泛支持它们。

为什么要制作两个相互依赖的模块?Fortran中没有类似头的东西。模块依赖项不能是循环的。Make在制定正确的编译顺序方面不太好,尤其是在进行并行编译时。必须将函数放在同一个模块中,并且要处理循环依赖关系,请使用接口块。请参见这里的示例:据我所知,只有Cray编译器支持它们。有关比较概述,请参阅