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