【发布时间】:2014-07-22 09:38:14
【问题描述】:
我有一些使用包含模块的 Fortran 代码,我想知道哪些环境变量实际上可以用来设置包含路径。
为了测试这一点,我一直在使用 NAG 示例代码之一。
这行得通:
$ gfortran e04ucfe.f90 -lnag_nag -I/opt/NAG/fll6a23dfl/nag_interface_blocks
这不起作用:
$ export CPATH=/opt/NAG/fll6a23dfl/nag_interface_blocks
$ gfortran e04ucfe.f90 -lnag_nag
e04ucfe.f90:10.37:
USE nag_library, ONLY : nag_wp
1
Fatal Error: Can't open module file 'nag_library.mod' for reading at (1): No such file or directory
但是,GCC/GFortran 文档指出:
gfortran 编译器目前不使用任何环境 变量来控制其操作超出那些影响 gcc的操作。
(见https://gcc.gnu.org/onlinedocs/gfortran/Environment-Variables.html和https://gcc.gnu.org/onlinedocs/gcc/Environment-Variables.html#Environment-Variables)
我已经尝试ltrace-ing gfortran 运行,并且可以看到它查看其他环境变量(例如常规 PATH)但不是 CPATH。
我可以解决这个问题:
gfortran e04ucfe.f90 -lnag_nag `echo -I$CPATH | sed -e 's/:/ -I/'`
...但是为什么这是必要的? CPATH 适用于 gcc,包括除 C/C++ 以外的其他语言,那么为什么这不适用于 gfortran?
我可以成功地使用与 gfortran 的 gcc 的 CPATH 相同的效果,以避免传递多个 -I 参数吗?
旁注:LIBRARY_PATH 以类似的方式工作正常,用于替换 gfortran 命令行上的 -L/path/to/libs。
【问题讨论】:
-
文档状态:“CPATH 指定要搜索的目录列表,就像使用 -I 指定一样,但在命令行上使用 -I 选项给出的任何路径之后。无论正在预处理哪种语言。”
-
其实,我担心“被预处理”是这里的重点。我将检查 gfortran 是否通过预处理器运行包含的内容,或者它们是否以其他方式完成......
-
是的,它适用于 C 预处理器,即使在 Fortran 源代码上运行,也不适用于内部 Fortran 语言的东西。
-
所以我想我的问题切换到“gfortran 的 CPATH 变量是否有等价物,以避免需要传递 -I 参数?”
-
是的,我也不这么认为,我也想知道,但找不到解决方案。顺便提一句。 CPATH 技巧适用于 ifort。
标签: gcc path include fortran gfortran