我在Linux工作,我有一个用Fortran 90编写的库(由第三方编写),即从当前工作目录中的文件读取。我希望能够从其他文件夹中调用生成的库,因此我需要读取安装库的路径。如何知道Fortran代码中编译库的路径?
我需要在变量中存储代码中的路径。
谁知道python,我希望实现与
相同import os
os.path.dirname(os.path.abspath(__file__))
但在f90(见Get location of the .py source file)
使用评论中的建议我已完成以下操作:
export DATAPATH=`pwd`
make
Makefile中的
ifort -O3 -fpic -fpp -DDATAPATH -c mysource.f90
mysource.f90
中的
subroutine mysub
character(len=100)::dpath
#ifdef DATAPATH
dpath=DATAPATH
#endif
open(10,file=trim(dpath)//'initialise.dat')
....
....
问题是在编译时我得到了
mysource.f90(42): error #6054: A CHARACTER data type is required in this context. [1]
dpath=1
----------^
compilation aborted for mysource.f90 (code 1)
答案 0 :(得分:1)
如果您希望可以在编译时修复路径。像
这样的东西gfortran -cpp mylib.f90 -DPREFIX=\"/usr/local/\"
open(newunit=u,file=PREFIX//'mylib/initialise.dat')
您必须确保该库确实安装在该位置PREFIX/mylib/
您可以创建包含数据路径的环境变量。此变量可以手动设置,在.bashrc
或.bash_profile
或系统/etc/profile.d/
或/etc/bash.bashrc
中,有很多方面,如果图书馆仅供一个人使用用户或某些大型计算机的所有用户。
例如
export MYLIB_PATH='/usr/local/mylib'
然后你可以在Fortran中读取变量
CALL get_environment_variable("MYLIB_PATH", mylib_path, status=stat)
,路径现在位于变量mylib_path
中。您可以通过检查是否stat==0
来检查成功。
这不是唯一可行的方法。您还可以在主目录中拥有库的配置文件:
mkdir $HOME/.config/mylib/
echo "/usr/local/mylib" > $HOME/.config/mylib/path
然后,如果未设置环境变量,您可以尝试从此文件中读取路径
if (stat/=0) then
CALL get_environment_variable("HOME", home_dir)
open(newunit=path_unit, file=home_dir//'/.config/mylib/path',status='old',action='read',iostat=stat)
if (stat/=0) complain
read(path_unit,'(a)',iostat=stat) mylib_path
if (stat/=0) complain
end if
答案 1 :(得分:1)
因此,当您使用-DDATAPATH进行编译时,您没有将变量DATAPATH传递给您的代码,只是将名为DATAPATH的符号声明为true,因此ifort将DATAPATH替换为1.您需要做的是将其作为值传递:
-DDATAPATH="$(DATAPATH)"
使编译工作。