Fortran Coder

标题: Linux下Intel Fortran多文件编译的问题 [打印本页]

作者: joezhr    时间: 2021-7-31 15:05
标题: Linux下Intel Fortran多文件编译的问题
各位前辈好,想请教个关于在Linux系统下编译多个文件的问题(本萌新目前只会用命令行编译,然而要编译的文件有一百个左右)。
要编译的代码(课题组的闭源代码)在Windows下用VS能成功编译,但Linux下好像没有这样成熟的IDE,于是打算用VSCode或者makefile来处理。起初在VSCode里没有找到Intel Fortran相关的扩展内容,于是计划采用makefile。
我参考的makefile的格式大致如下图所示。

要编译的文件主要包括一个声明中间变量的.fi文件,主程序代码的.f90文件,几个经过编译的.mod文件以及许多仅含subroutine的.f90文件。请问各位前辈MODSOURCE这里是否只能用写有module的.f90源文件而不是编译出来的.mod文件?仅写了subroutine的.f90文件是否也应该放在MODSOURCE这里和那些module的源文件一同编译呢? .fi文件应该如何处理呢?(我已尝试将.fi文件,.mod文件和除主程序之外的.f90都写在了MODSOURCE处,编译时直接提示.fi文件无法打开,随后报了许多错误。)

作者: 风平老涡    时间: 2021-7-31 20:44
声明中间变量的.fi文件是什么?是Fortran? 后缀很奇怪。只有module编译出来的.mod文件在MODSOURCE。仅写了subroutine的.f90文件放在SOURCE.
作者: joezhr    时间: 2021-8-1 14:35
本帖最后由 joezhr 于 2021-8-1 14:39 编辑
风平老涡 发表于 2021-7-31 20:44
声明中间变量的.fi文件是什么?是Fortran? 后缀很奇怪。只有module编译出来的.mod文件在MODSOURCE。仅写了s ...

感谢前辈的指点~ .fi文件是一个Intel Fortran的Header file:

在该文件中声明了许多整型和双精度的变量,例如:
[Fortran] 纯文本查看 复制代码
Use Constant

Integer Nfact
Integer Nspecf
Integer Iasem
Double Precision Xjacb
...


作者: 风平老涡    时间: 2021-8-2 07:59
joezhr 发表于 2021-8-1 14:35
感谢前辈的指点~ .fi文件是一个Intel Fortran的Header file:

在该文件中声明了许多整型和双精度的变量, ...

这是include文件,无需编译。在所需位置加 include filename即可。
作者: joezhr    时间: 2021-8-2 09:36
风平老涡 发表于 2021-8-2 07:59
这是include文件,无需编译。在所需位置加 include filename即可。

前辈您好,按照您的建议我将主程序.f90文件和写有subroutine的.f90文件均放在了SOURCE后,所有.mod文件放在了MODSOURCE后,并在Makefile中增加了一句 -include filename.fi,保存并在终端执行make时提示缺失分隔符。

于是我用sed命令将各行开头的空格替换为了制表符,现在缺失分隔符的报错没有了,但是出现了如下错误:
filename.fi: 1: *** 配方在第一个目标前开始。 停止。
我在搜索引擎没找到相关的解决方法,想请问这是什么原因导致的呢?
作者: 风平老涡    时间: 2021-8-2 18:59
joezhr 发表于 2021-8-2 09:36
前辈您好,按照您的建议我将主程序.f90文件和写有subroutine的.f90文件均放在了SOURCE后,所有.mod文件放 ...

include filename.fi 应该是在Fortran程序中, 而不是Makefile。 include是F77语句。
作者: joezhr    时间: 2021-8-3 21:21
风平老涡 发表于 2021-8-2 18:59
include filename.fi 应该是在Fortran程序中, 而不是Makefile。 include是F77语句。

感谢前辈的回复,按照您的方法在主程序汇总增加了
[Fortran] 纯文本查看 复制代码
include 'filename.fi'

但由于这个.fi文件use了一个module,使用ifort编译时没有成功(照理说在一个module中或者头文件中引用另一个module应该是可行的吧?),现在打算直接把这个.fi文件中声明的变量直接分散写到其他的.f90文件中了,先尝试编译出来。
再次感谢前辈!
作者: 风平老涡    时间: 2021-8-4 03:01
joezhr 发表于 2021-8-3 21:21
感谢前辈的回复,按照您的方法在主程序汇总增加了
[mw_shl_code=fortran,true]include 'filename.fi'[/mw ...

module必须在所有的定义语句之前。include语句是Fortran77的扩展,不是语言的一部分,不推荐使用。可用module代替。
作者: joezhr    时间: 2021-8-4 16:27
风平老涡 发表于 2021-8-4 03:01
module必须在所有的定义语句之前。include语句是Fortran77的扩展,不是语言的一部分,不推荐使用。可用mo ...

了解了,多谢前辈




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2