在Linux上安装后如何使C ++程序读取预定义文件

问题描述 投票:1回答:1

我的项目文件夹具有以下结构

-Project/
        /src
             -Main.cpp
             -MyReader.cpp
        /headers
             -MyReader.h
        /DataFiles
             -File.dat
             -File1.dat

我的班级Object.cpp有几种方法,它们从File.datFile1.dat中读取并将信息解析为Map对象。我的问题是我正在使用Autotools(我是个非常新手)来生成配置文件和安装程序文件,我不知道如何在安装后使程序可以访问所有DataFiles文件。该程序无法正常运行,因为尝试通过相对路径读取这些文件时代码失败。在本地,在终端make && ./program中执行后,程序可以完美运行。

我该如何解决这个问题?预先感谢您的帮助!

c++ autotools autoconf automake
1个回答
1
投票

使用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");

免责声明: 未经测试的代码

© www.soinside.com 2019 - 2024. All rights reserved.