Gcc gfortran include path——除了传递多个-I选项之外,还有其他选择吗?

Gcc gfortran include path——除了传递多个-I选项之外,还有其他选择吗?,gcc,path,include,fortran,gfortran,Gcc,Path,Include,Fortran,Gfortran,我有一些使用包含模块的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 e04uc

我有一些使用包含模块的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的运作

(见和)

我尝试了
ltrace
-ing gfortran运行,可以看到它查看其他环境变量(例如常规
路径
),但没有查看
CPATH

我可以用这个来解决这个问题:

gfortran e04ucfe.f90 -lnag_nag `echo -I$CPATH | sed -e 's/:/ -I/'`
……但为什么这是必要的
CPATH
可以很好地用于gcc,包括用于C/C++以外的其他语言,那么为什么它不能用于gfortran呢? 我是否可以成功地使用与CPATH for gcc with gfortran相同的效果,以避免传递多个
-I
参数?


旁注:
LIBRARY\u PATH
以类似的方式工作,用于替换gfortran命令行上的
-L/PATH/to/libs

据我所知,
gfortran
不支持此功能,这非常烦人。但有可能解决这个问题。如果将以下脚本命名为
gfortran
,并将其放在
$PATH
中的一个目录中,该目录在其中包含真实
gfortran
的脚本之前搜索,则将具有所需的行为,
$CPATH
透明地扩展为-I参数:

#!/bin/bash
/path/to/gfortran $(for i in ${CPATH//:/ }; do echo -I"$i"; done) "$@"
记住将其标记为可执行文件。例如,如果我的
$PATH
/home/amaurea/local/bin:/usr/local/bin:/usr/bin:/bin
并且
gfortran
位于
/usr/local/bin
中,我会将其设置为

$ cd /home/amaurea/local/bin
$ cat <<HERE > gfortran
#!/bin/bash
/usr/bin/gfortran $(for i in ${CPATH//:/ }; do echo -I"$i"; done) "$@"
HERE
$ chmod a+x gfortran
$cd/home/amaurea/local/bin

$cat如果您使用的是makefile,那么我使用
subst
命令实现了这一点。对于文件中的每个路径,这会将
替换为
-I

usr/bin/gfortran e04ucfe.f90 -lnag_nag -I${subst :, -I,$(CPATH)}

docs声明:“CPATH指定要搜索的目录列表,就像用-I指定一样,但是在命令行上用-I选项指定的任何路径之后。无论使用哪种语言进行预处理,都会使用此环境变量。”实际上,我担心“正在预处理”是这里的重点。我将检查gfortran是否通过包含的预处理器运行,或者是否以其他方式运行…是的,它适用于C预处理器,即使在Fortran源代码上运行,也不适用于内部Fortran语言。因此我想我的问题切换到“为了避免传递-I参数,gfortran是否有一个与CPATH变量等效的变量?”是的,我也不这么认为,我也想知道这一点,但找不到解决方案。B.t.w.CPATH技巧对ifort很有效。