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

时间:2017-12-24 03:49:20

标签: module fortran include

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

1 个答案:

答案 0 :(得分: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用于替代搜索目录,-J用于.mod文件),这也可能有用。我想我们也有其他编译器的类似选项。