Makefile 将Fortran模块链接在一起

Makefile 将Fortran模块链接在一起,makefile,fortran,gfortran,Makefile,Fortran,Gfortran,我有一个项目,我有我的主文件和两个模块在他们自己的文件中,比如main.f95,mod1.f95,mod2.f95。最初,我设计的Makefile就是以这种方式运行的 # PROGRAM NAME main = main # MODULE NAME mod1 = mod1 mod2 = mod2 ######################################## cmplr = gfortran flags = -g -Wall objects1 = $(mod1).o

我有一个项目,我有我的主文件和两个模块在他们自己的文件中,比如main.f95,mod1.f95,mod2.f95。最初,我设计的Makefile就是以这种方式运行的

# PROGRAM NAME
main = main

# MODULE NAME
mod1 = mod1
mod2 = mod2
########################################
cmplr = gfortran
flags = -g -Wall

objects1 = $(mod1).o    $(mod2).o       $(main).o

$(main)     :   $(objects1)
                $(cmplr) $(flags) -o $(main) $(objects1)

$(mod1).o   :   $(mod1).f95
                $(cmplr) -c $(mod1).f95

$(mod2).o   :   $(mod2).f95
                $(cmplr) -c $(mod2).f95

$(main).o   :   $(main).f95 $(mod1).f95 $(mod2).f95
                $(cmplr) -c $(main).f95

clean           :
                rm -f *.mod *.pcl *.pc *.o $(main) *.inc *.vo *.d *.out

这对我的初始设计很有效,但是现在我的项目的复杂性已经达到了一个地步,mod1将用于mod2和主文件中,所以我需要重新链接这些文件

我尝试对Makefile进行此更改

$(mod2).o   :   $(mod2).f95      $(mod1).f95
                $(cmplr) -c $(mod2).f95

我基本上遵循了main.o编译结构是如何在Makefile中定义的,并且遵循了该设计,因为它看起来很相似,但是我尝试将mod1链接到mod2时似乎不起作用。任何帮助或建议都将不胜感激

如注释中所述,如果切换顺序使

$(mod2).o   :   $(mod1).f95      $(mod2).f95
                $(cmplr) -c $(mod2).f95

你能试试
$(mod1).f95$(mod2).f95
<代码>生成不会“检测”依赖项。不管怎样,我还是推荐:-)既然您使用的是GFortran,我推荐我在Wow上描述的方法(就在几个小时前),只要切换编译顺序就可以了。我的错误是忘记尝试这么简单的东西。感谢您的帮助和信息!