2

嘿,如果在编译时设置了环境变量“XYZ”,那么我想要的部分是:

write (STDOUT,*) "Compiled with XYZ"
here one more function call bla()

被编译成二进制文件。如果不是,那就不是。有什么办法吗?非常感谢!

4

3 回答 3

7

编译时不能检查环境变量,但可以将选项传递给编译器——称为预处理。这没有大量记录,但至少适用于 gfortran 和 intel ifort。在编译行上使用或不使用“-DMYOPTION”(或您选择的任何选项名称)。然后在代码中:

#ifdef MYOPTION
Fortran source code
#else
Fortran source code
#endif

显然,预处理器行必须从第一列开始。

如果您使用文件类型“F90”,则会自动调用预处理器,否则您可以使用编译器选项来调用此步骤。

也许这会满足您的需求?如果没有,您可以使用命令脚本来检查环境变量并根据其值使用不同的编译命令,以使预处理器方法响应环境变量。

当然,您可以在运行时使用内在的 get_environment_variable .. 来检查环境变量。简单地使用 if 语句来响应一个值可能会更容易。

于 2011-04-13T17:15:42.573 回答
1

作为 Fortran 2008 标准的一部分,有用于查找编译器选项和编译它的版本的内在函数。 编译器选项编译器版本。Fortran 编译器正在慢慢跟上新标准。gfortran 有它,它看起来不像 ifort 12 那样:

program compilerinfo
    use iso_fortran_env
    implicit none

    print *,'This program was compiled with ', compiler_version()
    print *,'with flags ', compiler_options()
end program compilerinfo

和跑步给

$ ./compilerinfo
 This program was compiled with GCC version 4.6.0
 with flags -mtune=generic -march=x86-64
于 2011-04-13T19:19:41.387 回答
0

只有最新的 Fortran 编译器提供这样的功能。

最接近的机制是编写一个程序,该程序获取环境变量并编写一个包含所需信息的 Fortran 子例程。添加到项目构建:

  1. 运行程序抓取环境变量并编写子程序
  2. 编译子程序
  3. 将对象链接到项目的其余部分。

编辑以反映 Fortran 2008+ 编译器

于 2011-04-13T16:18:00.210 回答