是否有可能将“include”转移到fortran的模块中?

问题描述 投票:0回答:1

现在假设由于某种原因我只能有一个文件(包含Fortran代码),名为“inc.f90”,由其他f90文件中的'include'语句使用。当我在另一个文件中使用此代码时,请说“use.f90”,我输入“include'inc.f90'”。但在这种情况下,“use.f90”中包含路径信息。然后我需要以固定的方式组织我的代码文件。例如,如果我将“inc.f90”移动到其他位置(“other / path / inc.f90”),我需要相应地更改“use.f90”中的源代码。这很尴尬!我想知道我是否可以使用一些技巧将“inc.f90”打包到一个模块中,之后我只需要告诉编译器所有文件的位置。

module fortran include
1个回答
0
投票

如果你使用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),这也可能有用。我想我们对其他编译器也有类似的选择。

© www.soinside.com 2019 - 2024. All rights reserved.