Module Makefile:避免为新文件夹编译Fortran模块
我有一个使用模块的Fortran程序,即它在编译期间创建Module Makefile:避免为新文件夹编译Fortran模块,module,makefile,fortran,Module,Makefile,Fortran,我有一个使用模块的Fortran程序,即它在编译期间创建.mod-文件。 我还编写了一个Makefile,它使用src/中的所有.f90-文件,将所有创建的.o-文件放在obj/中,二进制文件放在当前文件夹中,一切正常 现在,我在不同的文件夹中重新编译我的程序,以进行不同的计算(例如calc1/),也就是说,我将Makefile复制到calc1/,在calc1/中键入makeall,它所做的只是链接,因为对象文件已经存在。但是,如果程序包含任何模块,编译器需要相应的.mod-文件出现在calc1
.mod
-文件。
我还编写了一个Makefile
,它使用src/
中的所有.f90
-文件,将所有创建的.o
-文件放在obj/
中,二进制文件放在当前文件夹中,一切正常
现在,我在不同的文件夹中重新编译我的程序,以进行不同的计算(例如calc1/
),也就是说,我将Makefile
复制到calc1/
,在calc1/
中键入makeall
,它所做的只是链接,因为对象文件已经存在。但是,如果程序包含任何模块,编译器需要相应的.mod
-文件出现在calc1/
中。到目前为止,我重新编译了所有内容(makecleanlall
),但随着程序的增长,这需要花费太多的时间
我提出的一个可能的解决方案是为二进制文件设置一个特定的文件夹(bin/
)。但这并不是一个可行的选择,因为我在队列中有作业,这显然需要一个稳定的二进制文件,同时我也在尝试新功能
因此,我正在寻找一种解决方案,以某种方式处理.mod
-文件,类似于.o
-文件,例如,将它们放在obj/
中。我希望(大多数?)编译器会指定一个选项来更改模块文件路径。使用gfortran
,选项为-J
或-M
(从手册页):
我认为大多数编译器在-I
编辑
从gfortran 4.6开始,-M
不再受支持。使用-J
根据我的一个配置脚本,标志是
-module
用于ifort
和pgf90
,尽管我最近几乎从未使用过这些编译器,所以其他人应该确认…我知道Make,但我不知道Fortran(ha!)。编译器是否在当前目录中生成mod
文件?它们是否有可预测的名称(例如foo.f90
=>foo.mod
)?你能用编译器的参数控制它们的名称吗?好的,mod
文件在当前目录中创建,并按照文件中给定的名称命名,例如foo.f90
包含模块条
,然后文件将命名为bar.mod
。这在编译期间无法控制,因为名称在其他文件中使用,即在main.f90
i writeuse bar
中。已确认。对于ifort
,它是-module
。谢谢你的帮助!
-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.