Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Module 看似不一致的生成文件行为(w/Fortran)_Module_Makefile_Fortran - Fatal编程技术网

Module 看似不一致的生成文件行为(w/Fortran)

Module 看似不一致的生成文件行为(w/Fortran),module,makefile,fortran,Module,Makefile,Fortran,在过去的一年里,我刚刚开始使用Fortran进行工作,这是我第一次体验编译语言。在工作中,我们使用一个管理编译和链接的开发环境。然而,为了让我的Fortran游戏更上一层楼,我已经开始在家里实现数据结构和算法。因此,我第一次进入makefile 我现在只有两个程序,a的实现和算法 (荒谬的基本)链接和编译没有任何问题。我试图在链表示例之后对模型进行建模,但由于某种原因,它无法生成.mod文件。此外,如果我通过以下命令显式生成.mod文件 gfortran -c QuickFindUF.f90

在过去的一年里,我刚刚开始使用Fortran进行工作,这是我第一次体验编译语言。在工作中,我们使用一个管理编译和链接的开发环境。然而,为了让我的Fortran游戏更上一层楼,我已经开始在家里实现数据结构和算法。因此,我第一次进入makefile

我现在只有两个程序,a的实现和算法

(荒谬的基本)链接和编译没有任何问题。我试图在链表示例之后对模型进行建模,但由于某种原因,它无法生成.mod文件。此外,如果我通过以下命令显式生成.mod文件

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