Makefile:避免为新文件夹编译Fortran模块

时间:2012-04-12 13:06:12

标签: module makefile fortran

我有一个使用模块的Fortran程序,即它在编译期间创建.mod个文件。 我还写了一个Makefile,它使用了所有.f90 - 来自src/的文件,将所有创建的.o - 文件放在obj/中,将二进制文件放在当前文件夹中,一切正常。

我现在在不同的文件夹中重新编译我的程序以进行不同的计算(比如calc1/),即我将Makefile复制到calc1/,在make all中输入calc1/它所做的只是链接,因为对象文件已经存在。但是,如果程序包含任何模块,则编译器需要相应的.mod - 文件存在于calc1/中。到目前为止,我重新编译了所有内容(make clean all),但随着程序的增长,这需要花费太多时间!

我想出的一个可能的解决方案是为二进制文件(bin/)创建一个特定的文件夹。但这不是一个可行的选择,因为我在队列中有工作,显然需要一个稳定的二进制文件,同时我也尝试新的功能。

所以,我正在寻找一种解决方案,以某种方式处理.mod - 类似于.o的文件 - 文件,例如将它们放在obj/

1 个答案:

答案 0 :(得分:4)

我希望(大多数?)编译器会指定一个更改模块文件路径的选项。使用gfortran,选项为-J-M(来自手册页):

-Jdir
-Mdir
       This option specifies where to put .mod files for compiled modules.  It is also
       added to the list of directories to searched by an "USE" statement.

       The default is the current directory.

       -M is deprecated to avoid conflicts with existing GCC options.

我认为大多数编译器会在-I

中包含的目录中查找.mod文件

修改

从gfortran 4.6开始,-M不再受支持。使用-J

基于我的一个配置脚本,-moduleifort的标记为pgf90,但这些天我几乎从不使用这些编译器,所以其他人应该确认... < / p>