我能否在不重新创建.mod文件的情况下编译f90代码?

3
我是一名Fortran新手,正在尝试理解编译所需的全部内容。到目前为止一切都很好,但有一件事我不明白。假设我修改了代码,但我的修改并不会改变.mod文件的内容,那么我能否在不重新创建.mod文件的情况下编译并创建目标文件?如果可以,应该如何操作呢?我尝试在互联网上搜索,但并没有真正找到答案。顺便说一下,我正在使用gfortran。非常感谢您的帮助,如果答案已经存在(我找不到),请多多包涵。

你是否使用任何构建系统,例如Makefile或类似的东西?你是在询问如何避免不必要的重新编译吗?你能展示一个例子(不是代码,只是命令)你正在做什么吗? - Vladimir F Героям слава
@VladimirF 很遗憾,我无法展示一个例子,但这正是我想要做的,避免不必要的重新编译,因为这是一个庞大的程序,总共需要大约4分钟来编译。是的,正在使用Makefile! - supe345
在这种情况下,你确实需要展示一个例子。请参考[ask]和[mcve]。请注意,还有其他更现代的构建系统,其中一些专门针对Fortran。基本上,这是一个XY问题,你实际上不需要避免重新创建mod文件,而是需要避免重新编译。 - Vladimir F Героям слава
@VladimirF 你说得对,我应该展示其中的一部分,但不幸的是这是机密的,并且这是一个被很多人使用的程序,所以至少在不久的将来不可能使用另一个构建系统。我只是实习两个月,没有太多发言权。 - supe345
1个回答

3

如果您使用的是gfortran编译器,则编译器已经为您完成了此操作。在编译模块时,它会使用临时名称创建.mod文件,然后在现有的.mod文件(如果存在)和新文件之间比较校验和,仅当校验和不同时才用新的替换旧的。


非常感谢您的回答。好的,但有没有办法告诉gfortran根本不要创建这些.mod文件呢?我不想浪费时间重新创建.mod文件。 - supe345
你有进行过分析和验证,确认编写 .mod 文件占据了源文件的整个编译时间的大部分吗? - janneb
使用-fsyntax-only来加快编译速度的一个用例是先使用它进行一次遍历,生成所有所需的.mod文件,然后再进行第二次遍历进行“真正”的构建,这样可以更多地并行处理。是否值得这样做取决于项目本身。 - janneb
更一般地说,为了加速构建过程,请确保您的 makefile 中的依赖关系是正确的。特别是,如果您指定了对 .mod 文件而不是 .o 文件的依赖关系,则此答案中提到的 gfortran 功能可帮助避免重新编译级联。另一个常见的技巧是设置“调试构建”选项,以启用各种错误检查选项,并降低优化级别,从而实现更快的构建速度(代价是运行时性能)。 - janneb
非常感谢!我会尝试的! - supe345
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接