Module Fortran:在“头模块”中声明函数和子例程
如何在单独的模块中声明函数和子例程,并在相应的非头模块中初始化它 我正在使用make进行编译: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) 。。问题是,物理,依赖
# 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编译器支持它们。有关比较概述,请参阅