我下载了一些Fortran源代码,其中包含大约50个.f
个文件。每个.f
文件包含一个子例程或函数。我想方便地将所有这些内容填充到Fortran模块.mod
文件中。有没有办法用gfortran做这个(除了在模块定义中刻苦写出每个sub / func原型)?
答案 0 :(得分:1)
这是一个格式化的评论而不是答案,但您可以尝试编写类似这样的源文件
module this_will_end_in_tears
contains
include 'subroutine1.f'
include 'subroutine2.f'
include 'subroutine2.f'
...
end module this_will_end_in_tears
如果我怀疑.f
文件包含固定格式的源代码,那么最好确保模块也是固定格式的。
我希望,正如您可能已经猜到的那样,这不会在您第一次尝试时编译,但它可能(只是可能)为您节省一点时间来完成工作,正如您所说,煞费苦心地写出每个子/功能 ......
哦,为了避免任何一个Fortran爱好者在这个建议中畏缩,请注意我并不是说这是一个很好的方法,只是为了节省你一点时间。 / p> 祝你好运。
答案 1 :(得分:0)
我制作了这个bash脚本,它接受两个参数'模块名'和'文件扩展名',然后构建一个模块文件。它目前是固定格式的。所有源文件必须与脚本位于同一目录中。当然,您可以将其修改为更灵活。
name=$1
ext=$2
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
答案 2 :(得分:-1)
我通常通过将.f90代码编译为-fixed来解决问题。然后通常添加INTENT和IMPLICIT NONE。几乎总是我有D-Lines进行调试,这似乎对我来说最简单 - 固定形式。后来添加了对齐编译指示和OpenMP减少子句以及相关的向量内容。