【问题标题】:Linking Fortran Modules Together将 Fortran 模块链接在一起
【发布时间】:2019-09-12 07:36:17
【问题描述】:

我有一个项目,其中我的主文件和两个模块在它们自己的文件中,例如 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

我基本上遵循了在 Makefile 中定义 main.o 编译结构的方式,并遵循了该设计,因为它看起来很相似,但它似乎对我试图将 mod1 链接到 mod2 不起作用。任何帮助或建议表示赞赏!

【问题讨论】:

  • 你可以试试$(mod1).f95 $(mod2).f95吗? make 不会“检测”依赖关系。无论如何,我热烈推荐cmake :-)
  • 由于您使用的是 GFortran,因此我推荐我在 stackoverflow.com/a/57883160/75652 描述的方法(就在几个小时前)
  • 哇,只要切换顺序就可以编译了。我的错误是忘记尝试如此简单的事情。感谢您的帮助和信息!

标签: makefile fortran gfortran


【解决方案1】:

如 cmets 中所述,如果切换顺序,则 Makefile 将编译

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-15
    • 2015-10-18
    • 2019-05-29
    • 1970-01-01
    • 1970-01-01
    • 2012-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多