亲爱的所有我有一个包含预处理器宏的小型Fortran程序。以下是一个最小的例子。在mac os x上,它运行良好,但是当我在Windows 7(64位)上编译它时,它总是打印unknown operating system
。我在Windows 7上使用gfortran-4.8.0(mingw32)。
program foo
implicit integer(i-n), double precision (a-h,o-p),
+ character*8(x-z)
*
#ifdef _WIN64
zterm = 'wxt'
#elif _WIN32
zterm = 'wxt'
#elif __APPLE__
zterm = 'aqua'
#elif __linux
zterm = 'x11'
#elif __unix
zterm = 'x11'
#elif __posix
zterm = 'x11'
#else
print*, 'unknown operating system'
#endif
end program foo
将#ifdef _WIN64
更改为#if defined (_WIN64)
没有任何帮助。任何建议将不胜感激。
答案 0 :(得分:1)
这可能是GFortran PR 42954。由于GFortran开始使用libcpp而不是在单独的进程中运行cpp,因此缺少许多这些内置宏。
作为一种变通方法,您可以在构建过程中生成一个包含这些内置宏定义的文件,然后您可以将其包括在内。例如。有一个运行的制作目标
gcc -E -dM - < /dev/null > builtins.inc
那么你的资源应该依赖于Makefile中的builtins.inc,以及源文件的开头
#include "builtins.inc"