Dav*_*ner 5 gcc fortran path include gfortran
我有一些使用包含模块的Fortran代码,我想知道哪些环境变量实际上可以设置包含路径.
为了测试这一点,我一直在使用其中一个NAG示例代码.
这有效:
$ gfortran e04ucfe.f90 -lnag_nag -I/opt/NAG/fll6a23dfl/nag_interface_blocks
Run Code Online (Sandbox Code Playgroud)
这不起作用:
$ 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
Run Code Online (Sandbox Code Playgroud)
但是,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/'`
Run Code Online (Sandbox Code Playgroud)
......但为什么这有必要呢? CPATH使用gcc工作正常,包括其他语言而不是C/C++,那么为什么这不适用于gfortran?
有没有什么我可以成功地使用与gfort与gfortran的CPATH相同的效果,以避免必须传递多个-I参数?
旁注:LIBRARY_PATH以类似的方式工作正常,用于替换-L/path/to/libsgfortran命令行.
据我所知gfortran不支持这一点,这很烦人。但可以解决这个问题。如果您命名以下脚本gfortran并将其放入您的目录中,$PATH该目录在包含真实脚本的目录之前进行搜索gfortran,那么您将获得您想要的行为,并$CPATH透明地扩展为 -I 参数:
#!/bin/bash
/path/to/gfortran $(for i in ${CPATH//:/ }; do echo -I"$i"; done) "$@"
Run Code Online (Sandbox Code Playgroud)
请记住将其标记为可执行文件。例如,如果我的$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
Run Code Online (Sandbox Code Playgroud)
或者,您可以将其制定为 shell 别名,但这会不太灵活,并且在很多情况下都不起作用。
| 归档时间: |
|
| 查看次数: |
5890 次 |
| 最近记录: |