是否有可能将“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的模块中?的主要内容,如果未能解决你的问题,请参考以下文章

将 char 数组从 c++ 传递到 fortran

Fortran:稀疏数组或列表

Laravel:将项目转移到生产[关闭]

将 mpi 消息从 c++ 代码发送到 fortran 90 代码

将 Fortran 转换为 C 或 C++

Fortran 派生类型