我的项目文件夹具有以下结构
-Project/
/src
-Main.cpp
-MyReader.cpp
/headers
-MyReader.h
/DataFiles
-File.dat
-File1.dat
我的班级Object.cpp
有几种方法,它们从File.dat
和File1.dat
中读取并将信息解析为Map对象。我的问题是我正在使用Autotools(我是个非常新手)来生成配置文件和安装程序文件,我不知道如何在安装后使程序可以访问所有DataFiles文件。该程序无法正常运行,因为尝试通过相对路径读取这些文件时代码失败。在本地,在终端make && ./program
中执行后,程序可以完美运行。
我该如何解决这个问题?预先感谢您的帮助!
使用Autotools
进行平台无关的方法是使用$(datadir)
变量来定位系统数据目录并相对于该目录工作。
因此,您可以在Makefile.am
文件中创建如下名称:
myprog_infodir = $(datadir)/myprog
# Set a macro for your code to use
myprog_CXXFLAGS = -DDATA_LOCATION=\"$(datadir)/myprog\"
# This will install it from the development directories
myprog_info_DATA = $(top_srcdir)/DataFiles/File.dat $(top_srcdir)/DataFiles/File1.dat
# make sure it gets in the installation package
extra_DIST = $(top_srcdir)/DataFiles/File.dat $(top_srcdir)/DataFiles/File1.dat
然后,在您的程序中,您应该能够像这样引用数据:
std::ifstream ifs(DATA_LOCATION "/File.dat");
免责声明: 未经测试的代码