Как я могу сделать программу C ++ для чтения предопределенных файлов после установки на linux - PullRequest
1 голос
/ 18 января 2020

Папка моего проекта имеет следующую структуру

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

Мой класс Object.cpp имеет несколько методов, которые считывают из File.dat и File1.dat и анализируют информацию для объектов Map. Моя проблема в том, что я использую Autotools (в котором я очень новичок ie) для генерации файлов конфигурации и установщика, и я не знаю, как сделать все файлы DataFiles доступными для программы после установки. Программа не работает должным образом из-за сбоя кода при попытке прочитать эти файлы по относительным путям. Локально, программа отлично работает после выполнения в терминале make && ./program.

Как я могу решить эту проблему? Заранее спасибо за помощь!

1 Ответ

2 голосов
/ 18 января 2020

Независимый от платформы способ сделать это с помощью 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");

Отказ от ответственности: Не проверено код

...