在 gfortran 中预处理 !DEC$ 指令

Posted

技术标签:

【中文标题】在 gfortran 中预处理 !DEC$ 指令【英文标题】:Pre-processing !DEC$ directives in gfortran 【发布时间】:2010-03-01 17:08:38 【问题描述】:

我有一个最初针对英特尔编译器的大型 Fortran 代码库。我现在正准备用 gfortran 编译。不幸的是,代码中充斥着英特尔风格的预处理指令,例如:

!DEC$ IF DEFINED (MYDIRECTIVE)
   REAL, DIMENSION(:,:,:), ALLOCATABLE :: my_real_var
!DEC$ ENDIF

据我通过谷歌搜索和 gfortran 文档得知,除了 C 风格的预处理之外,没有任何内部 gfortran 支持,例如:

#if defined MYDIRECTIVE
   REAL, DIMENSION(:,:,:), ALLOCATABLE :: my_real_var
#endif

有没有其他人遇到过这个问题并提出了一个优雅的解决方案?显然,在将代码传递给 gfortran 进行编译之前,我可以编写一个调用外部预处理器的 shell 脚本,但这对我来说似乎不是一个很好的解决方案。

有什么想法吗?谢谢各位大师!

【问题讨论】:

【参考方案1】:

英特尔 ifort 了解 C 风格的预处理器指令,因此将文件转换为该风格可能是最简单的。然后,您将拥有一个可与两种编译器一起使用的代码库。将有一些工作回归测试使用 ifort 转换的代码。

【讨论】:

以上是关于在 gfortran 中预处理 !DEC$ 指令的主要内容,如果未能解决你的问题,请参考以下文章

即使使用 `-dec-math`,gfortran 也会对 `dacosd_` 给出未定义的引用

预指令

C/C++中的预编译指令

嵌入式软件中预编译指令常见用法

嵌入式软件中预编译指令常见用法

预编译指令常见用法