用一堆 .f 源文件制作一个模块
Make a module out a bunch of .f source files
我下载了一些 Fortran 源代码,其中包含大约 50 个 .f
文件。每个 .f
文件包含一个子例程或函数。我想将所有这些方便地填充到 Fortran 模块 .mod
文件中。有没有办法用 gfortran 做到这一点(除了在模块定义中煞费苦心地写出每个 sub/func 原型)?
这更像是格式化评论而不是答案,但您可以尝试编写类似这样的源文件
module this_will_end_in_tears
contains
include 'subroutine1.f'
include 'subroutine2.f'
include 'subroutine2.f'
...
end module this_will_end_in_tears
如果我怀疑 .f
文件包含固定格式的源代码,那么您最好确保该模块也是固定格式的。
我预计,正如您可能已经猜到的那样,这不会在您第一次尝试时编译,但它可能(只是可能)为您节省一点时间来完成这项工作,就像您所说的那样, 煞费苦心写出每个sub/func ...
哦,为了避免任何 Fortran 爱好者对这个建议感到畏缩,请注意,我并不是说这是继续进行的好方法,只是它可以为您节省一点时间。
祝你好运。
我制作了这个 bash 脚本,它带有两个参数 'the module name' 和 'the file extension',然后构建一个模块文件。它目前是为固定格式制作的。所有源文件必须与脚本位于同一目录中。当然你可以修改它更灵活。
name=
ext=
modsrc=$name.$ext
echo -e " MODULE $name\n" > $modsrc
echo -e " implicit none\n" >> $modsrc
echo -e " contains\n" >> $modsrc
for i in *.f;
do
if [ "$i" != "$modsrc" ]; then
echo -e " include '$i'\n" >> $modsrc
fi
done
echo -e " END MODULE $name\n" >> $modsrc
我通常通过将 .f90 代码编译为 -fixed 来解决问题。然后通常添加 INTENT 和 IMPLICIT NONE。我几乎总是有用于调试的 D 线,这似乎对我来说最容易使用 -fixed 形式。稍后添加对齐编译指示和 OpenMP 缩减子句以及相关的向量内容。
我下载了一些 Fortran 源代码,其中包含大约 50 个 .f
文件。每个 .f
文件包含一个子例程或函数。我想将所有这些方便地填充到 Fortran 模块 .mod
文件中。有没有办法用 gfortran 做到这一点(除了在模块定义中煞费苦心地写出每个 sub/func 原型)?
这更像是格式化评论而不是答案,但您可以尝试编写类似这样的源文件
module this_will_end_in_tears
contains
include 'subroutine1.f'
include 'subroutine2.f'
include 'subroutine2.f'
...
end module this_will_end_in_tears
如果我怀疑 .f
文件包含固定格式的源代码,那么您最好确保该模块也是固定格式的。
我预计,正如您可能已经猜到的那样,这不会在您第一次尝试时编译,但它可能(只是可能)为您节省一点时间来完成这项工作,就像您所说的那样, 煞费苦心写出每个sub/func ...
哦,为了避免任何 Fortran 爱好者对这个建议感到畏缩,请注意,我并不是说这是继续进行的好方法,只是它可以为您节省一点时间。
祝你好运。
我制作了这个 bash 脚本,它带有两个参数 'the module name' 和 'the file extension',然后构建一个模块文件。它目前是为固定格式制作的。所有源文件必须与脚本位于同一目录中。当然你可以修改它更灵活。
name=
ext=
modsrc=$name.$ext
echo -e " MODULE $name\n" > $modsrc
echo -e " implicit none\n" >> $modsrc
echo -e " contains\n" >> $modsrc
for i in *.f;
do
if [ "$i" != "$modsrc" ]; then
echo -e " include '$i'\n" >> $modsrc
fi
done
echo -e " END MODULE $name\n" >> $modsrc
我通常通过将 .f90 代码编译为 -fixed 来解决问题。然后通常添加 INTENT 和 IMPLICIT NONE。我几乎总是有用于调试的 D 线,这似乎对我来说最容易使用 -fixed 形式。稍后添加对齐编译指示和 OpenMP 缩减子句以及相关的向量内容。