是否有可能将“include”转移到fortran的模块中?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了是否有可能将“include”转移到fortran的模块中?相关的知识,希望对你有一定的参考价值。
现在假设由于某种原因我只能有一个文件(包含Fortran代码),名为“inc.f90”,由其他f90文件中的'include'语句使用。当我在另一个文件中使用此代码时,请说“use.f90”,我输入“include'inc.f90'”。但在这种情况下,“use.f90”中包含路径信息。然后我需要以固定的方式组织我的代码文件。例如,如果我将“inc.f90”移动到其他位置(“other / path / inc.f90”),我需要相应地更改“use.f90”中的源代码。这很尴尬!我想知道我是否可以使用一些技巧将“inc.f90”打包到一个模块中,之后我只需要告诉编译器所有文件的位置。
答案
如果你使用gfortran
,我想你可以使用-I
选项指定包含文件的搜索路径。例如,如果我们在当前目录中有以下main.f90
,
$ cat ./main.f90
module testmod
implicit none
contains
include "inc1.f90"
include "inc2.f90"
end
program main
use testmod
call sub1 !! defined in inc1.f90
call sub2 !! defined in inc2.f90
end
和libdir / sub1和libdir / sub2中的sub1.f90和sub2.f90,
$ ls libdir/*
libdir/sub1:
./ ../ inc1.f90
libdir/sub2:
./ ../ inc2.f90
同
$ cat libdir/sub1/inc1.f90
subroutine sub1
print *, "hello1"
end
$ cat libdir/sub2/inc2.f90
subroutine sub2
print *, "hello2"
end
我们可以将它们编译为
$ gfortran -Ilibdir/sub1 -Ilibdir/sub2 main.f90
根据man gfortran
,有一些相关的选项(替代搜索目录的-idirafter
和.mod文件的-J
),这也可能有用。我想我们对其他编译器也有类似的选择。
以上是关于是否有可能将“include”转移到fortran的模块中?的主要内容,如果未能解决你的问题,请参考以下文章