我有一些使用包含模块的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
过-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
以类似的方式可以很好地代替-L/path/to/libs
gfortran命令行上的。
据我所知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
另外,您可以将其公式化为shell别名,但是这样的灵活性较差并且在很多情况下都无法使用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句