gfortran 中的条件编译
Conditional compilation in gfortran
我想知道是否可以 select 编译我的 Fortran 95 例程的不同部分。
例如,如果我将某个标志传递给 gfortran,则编译器会选择将哪个部分用于某个函数。我知道我可以在例程中使用 if
来做到这一点,但缺点是由于速度问题,我不希望程序一直 运行 if
。我想解决方案应该类似于 this one
我正在专门研究一个计算多体系统(比如一百万)能量的程序。然后我不想每次在编译时需要使用不同的能量定义时都放一个 if
。
我希望这是可能的并且我的问题很清楚。
你可以使用 C like 预处理器。命令行的 -cpp
命令行选项。默认情况下该选项未打开 (根据下面的 Vladimir F 评论),尽管它看起来像使用 .F90 文件扩展名(即大写 F
,而不是 .f90
) 将在没有 -cpp
选项的情况下完成此操作。
选项详情:
https://gcc.gnu.org/onlinedocs/gfortran/Preprocessing-Options.html
然后你可以按照你指出的那样做,所以:
#ifdef <some-var>
code when <some-var> is true
#elif defined(<other-var>)
code when <other-var> is true
#endif
根据需要。
this page 上有更多示例和实际代码。
此外,与 C/C++ 一样,您可以使用 -D
选项在命令行上定义宏:
gfortran -DCASE1=3 ...
这将用值 3
定义 CASE1
。如果不指定值,则 1
会自动分配给宏。这记录在同一页上。
我想知道是否可以 select 编译我的 Fortran 95 例程的不同部分。
例如,如果我将某个标志传递给 gfortran,则编译器会选择将哪个部分用于某个函数。我知道我可以在例程中使用 if
来做到这一点,但缺点是由于速度问题,我不希望程序一直 运行 if
。我想解决方案应该类似于 this one
我正在专门研究一个计算多体系统(比如一百万)能量的程序。然后我不想每次在编译时需要使用不同的能量定义时都放一个 if
。
我希望这是可能的并且我的问题很清楚。
你可以使用 C like 预处理器。命令行的 -cpp
命令行选项。默认情况下该选项未打开 (根据下面的 Vladimir F 评论),尽管它看起来像使用 .F90 文件扩展名(即大写 F
,而不是 .f90
) 将在没有 -cpp
选项的情况下完成此操作。
选项详情:
https://gcc.gnu.org/onlinedocs/gfortran/Preprocessing-Options.html
然后你可以按照你指出的那样做,所以:
#ifdef <some-var>
code when <some-var> is true
#elif defined(<other-var>)
code when <other-var> is true
#endif
根据需要。
this page 上有更多示例和实际代码。
此外,与 C/C++ 一样,您可以使用 -D
选项在命令行上定义宏:
gfortran -DCASE1=3 ...
这将用值 3
定义 CASE1
。如果不指定值,则 1
会自动分配给宏。这记录在同一页上。