带有 -gen-dep 选项的 ifort 无法在没有 .mod 文件的情况下生成依赖的情况

问题描述

首先请阅读---PS---部分。这个问题是我的误会。

我使用的是 ubuntu18.04 操作系统和 intel fortran 编译器“parallel studio xe 2020 update 4”ifort。

我尝试使用带有 -gen-dep 选项的 ifort 编译器在 fortran 源文件之间生成依赖关系。

以下简单代码是为我的测试编写的。文件名为“main.f90”。

program main
    use mod_a
    implicit none

end program main

我执行了以下命令来生成“main.f90”的依赖项。

ifort -gen-dep -Syntax-only main.f90

结果,我收到了以下错误消息。

main.f90(2): エラー #7002: コンパイル済みモジュールファイルを開くときのエラーです。INCLUDE パスを確認してください。   [MOD_A]
    use mod_a
--------^

错误消息通知“mod_a.mod”文件尚不存在(虽然它是用日语编写的)。 如果已经通过编译 mod_a.f90 生成了“mod_a.mod”,则通过执行上述命令,我得到了以下“真正的依赖”。

main.o : \
  main.f90 mod_a.mod

如何在不生成 mod_a.mod 的情况下生成依赖项? 如果存在实现我的目标的额外选项,我想优先了解这些选项。

感谢您的阅读。

---PS---

我向所有阅读这篇文章的人道歉。 这个问题是我的误会。

我再次尝试使用 ifort -gen-dep -Syntax-only main.f90 编译我的“main.f90”程序。

program main
    use mod_a
    implicit none

end program main

结果,我收到了以下错误消息和“真正的依赖”。

main.f90(2): エラー #7002: コンパイル済みモジュールファイルを開くときのエラーです。INCLUDE パスを確認してください。   [MOD_A]
    use mod_a
--------^
main.o : \
  main.f90 mod_a.mod

我不知道为什么我没有看到这种“真正的依赖”,但我的目标已经实现了。

然而,另外,我发现了另一个问题并解决了它。 如果“main.f90”有大量代码使用许多子程序、函数、变量等...... ifort -gen-dep -Syntax-only main.f90 返回

Fatal error: too many errors emitted,stopping Now

并且没有返回依赖项。 为了解决这个问题,我在 ifort 命令中添加-no-diag-error-limit

解决方法

您需要提供有关 mod_a 的信息。 预先编译它或将其提供给 ifort -gen-dep 命令

$ ifort -gen-dep -syntax-only main.f90 mod_a.f90 
main.o : \
  main.f90 mod_a.mod

mod_a.mod : \
  mod_a.f90

mod_a.o : \
  mod_a.f90