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文件无法打开,随后报了许多错误。)
声明中间变量的.fi文件是什么?是Fortran? 后缀很奇怪。只有module编译出来的.mod文件在MODSOURCE。仅写了subroutine的.f90文件放在SOURCE. 本帖最后由 joezhr 于 2021-8-1 14:39 编辑
风平老涡 发表于 2021-7-31 20:44
声明中间变量的.fi文件是什么?是Fortran? 后缀很奇怪。只有module编译出来的.mod文件在MODSOURCE。仅写了s ...
感谢前辈的指点~ .fi文件是一个Intel Fortran的Header file:
在该文件中声明了许多整型和双精度的变量,例如:
Use Constant
Integer Nfact
Integer Nspecf
Integer Iasem
Double Precision Xjacb
...
joezhr 发表于 2021-8-1 14:35
感谢前辈的指点~ .fi文件是一个Intel Fortran的Header file:
在该文件中声明了许多整型和双精度的变量, ...
这是include文件,无需编译。在所需位置加 include filename即可。 风平老涡 发表于 2021-8-2 07:59
这是include文件,无需编译。在所需位置加 include filename即可。
前辈您好,按照您的建议我将主程序.f90文件和写有subroutine的.f90文件均放在了SOURCE后,所有.mod文件放在了MODSOURCE后,并在Makefile中增加了一句 -include filename.fi,保存并在终端执行make时提示缺失分隔符。
于是我用sed命令将各行开头的空格替换为了制表符,现在缺失分隔符的报错没有了,但是出现了如下错误:
filename.fi: 1: *** 配方在第一个目标前开始。 停止。我在搜索引擎没找到相关的解决方法,想请问这是什么原因导致的呢? joezhr 发表于 2021-8-2 09:36
前辈您好,按照您的建议我将主程序.f90文件和写有subroutine的.f90文件均放在了SOURCE后,所有.mod文件放 ...
include filename.fi 应该是在Fortran程序中, 而不是Makefile。 include是F77语句。 风平老涡 发表于 2021-8-2 18:59
include filename.fi 应该是在Fortran程序中, 而不是Makefile。 include是F77语句。
感谢前辈的回复,按照您的方法在主程序汇总增加了
include 'filename.fi'
但由于这个.fi文件use了一个module,使用ifort编译时没有成功(照理说在一个module中或者头文件中引用另一个module应该是可行的吧?),现在打算直接把这个.fi文件中声明的变量直接分散写到其他的.f90文件中了,先尝试编译出来。
再次感谢前辈! joezhr 发表于 2021-8-3 21:21
感谢前辈的回复,按照您的方法在主程序汇总增加了
include 'filename.fi'
module必须在所有的定义语句之前。include语句是Fortran77的扩展,不是语言的一部分,不推荐使用。可用module代替。 风平老涡 发表于 2021-8-4 03:01
module必须在所有的定义语句之前。include语句是Fortran77的扩展,不是语言的一部分,不推荐使用。可用mo ...
了解了,多谢前辈
页:
[1]