Module 看似不一致的生成文件行为(w/Fortran)
在过去的一年里,我刚刚开始使用Fortran进行工作,这是我第一次体验编译语言。在工作中,我们使用一个管理编译和链接的开发环境。然而,为了让我的Fortran游戏更上一层楼,我已经开始在家里实现数据结构和算法。因此,我第一次进入makefile 我现在只有两个程序,a的实现和算法 (荒谬的基本)链接和编译没有任何问题。我试图在链表示例之后对模型进行建模,但由于某种原因,它无法生成.mod文件。此外,如果我通过以下命令显式生成.mod文件Module 看似不一致的生成文件行为(w/Fortran),module,makefile,fortran,Module,Makefile,Fortran,在过去的一年里,我刚刚开始使用Fortran进行工作,这是我第一次体验编译语言。在工作中,我们使用一个管理编译和链接的开发环境。然而,为了让我的Fortran游戏更上一层楼,我已经开始在家里实现数据结构和算法。因此,我第一次进入makefile 我现在只有两个程序,a的实现和算法 (荒谬的基本)链接和编译没有任何问题。我试图在链表示例之后对模型进行建模,但由于某种原因,它无法生成.mod文件。此外,如果我通过以下命令显式生成.mod文件 gfortran -c QuickFindUF.f90
gfortran -c QuickFindUF.f90
…Makefile将编译并链接其余部分,而无需抱怨。我确信我犯了一个新手错误,但如果有人能指出我的疏忽,我将不胜感激
更新:作为对评论的回应,我添加了makefiles的内容:
链表
快速查找
文件的顺序如下:
# Define function to compile and link component scripts
u_find: union_find.o QuickFindUF.o
gfortran -o QuickFindUF.o u_find union_find.o
union\u-find.f90
依赖于由QuickFindUF.f90
生成的模块,但它首先编译union\u-find
,因此它需要的模块还不存在
如果您切换顺序,使其首先生成QuickFindUF
,它将工作:
# Define function to compile and link component scripts
u_find: QuickFindUF.o union_find.o
gfortran -o QuickFindUF.o u_find union_find.o
但更好的做法是利用他们列出的mod依赖项,但它什么都不做:
QuickFindUF.mod: QuickFindUF.o QuickFindUF.f90
gfortran -c QuickFindUF.f90
QuickFindUF.o: QuickFindUF.f90
gfortran -c QuickFindUF.f90
union_find.o: union_find.f90 QuickFindUF.mod #Add the module dependency to union_find
gfortran -c union_find.f90
谢谢你的帮助。更改顺序是可行的(只需稍加修改),但我仍然不清楚为什么链表Makefile可以毫无问题地工作
LinkedList.f90
还取决于由LinkedList.f90
生成的模块。这可以解释吗?弗朗西斯卡勒斯,谢谢你的跟进。上述注释中引用的轻微修改如下:#定义编译和链接组件脚本的函数u\u-find:QuickFindUF.o union\u-find.o gfortran-o u-find-QuickFindUF.o union\u-find.o
@MarvinWardJr您必须已经编译了该模块。如果您开始清理并删除.mod和.o,然后尝试运行makefile,那么它将失败(对我来说是失败的)。这是一个有趣的结果。我刚刚测试了一次干净的跑步,对我来说效果很好。你肯定有QuickFindUF.o
在union\u find.o
之前?
# Define function to compile and link component scripts
u_find: QuickFindUF.o union_find.o
gfortran -o QuickFindUF.o u_find union_find.o
QuickFindUF.mod: QuickFindUF.o QuickFindUF.f90
gfortran -c QuickFindUF.f90
QuickFindUF.o: QuickFindUF.f90
gfortran -c QuickFindUF.f90
union_find.o: union_find.f90 QuickFindUF.mod #Add the module dependency to union_find
gfortran -c union_find.f90