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

标签 module makefile fortran

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

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

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

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

最佳答案

我希望(大多数?)编译器会指定一个选项来更改模块文件路径。对于 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

根据我的一个配置脚本,ifortpgf90 的标志是 -module,尽管这些天我几乎从不使用这些编译器所以其他人应该确认...

关于module - Makefile:避免为新文件夹编译 Fortran 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10124191/

相关文章:

loops - 检查变量是否已使用 Fortran 77 声明?

蟒轮 : "ModuleNotFoundError" after installing package

python - 如何组织GAE Modules app结构和代码?

c++ - 制作 : No rule to make a header file?

从一个 makefile 中的一段代码创建多个项目

bash - LIBTOOL 尝试编译 GMP 时失败

node.js - Fortran 中的生成进程

security - 如何禁用 NodeJs 内部模块?

python - 如何导入所有子模块?

Fortran 中输出字符串和值的格式