ресурсы — Как правильно загрузить файл конфигурации из библиотеки C ++

Я пишу небольшую библиотеку для задачи анализа изображений, где мне нужно инициализировать некоторые объекты в соответствии с информацией, хранящейся в файлах. Эти файлы поставляются вместе с библиотекой. Однако в моем коде я не знаю, как правильно обращаться к этим внешним файлам конфигурации. Очевидно, я не могу сослаться на полный путь файла конфигурации. Но относительный путь также не подходит, потому что я не уверен, должен ли этот путь быть относительно расположения общей библиотеки, или расположения исполняемого файла, связанного с общей библиотекой, или опять рабочего каталога из которого запускается исполняемый файл.
На данный момент мой код будет выглядеть так:

void
myImageAnalysisFunctionExportedInASharedLibrary(cv::Mat &input, cv::Mat &output)
{

const std::string configurationFile = "resources/analyserConfig.txt";
Analyser a;
a.setConfiguration(configurationFile);
a.analyse(input, output);

}

Я пишу на C ++ в среде Linux / Windows с OpenCV. Я бы предпочел портативное решение, которое не требует ссылки на Boost или Qt. Я использую CMake в качестве среды построения проекта.

0

Решение

Что касается путей к каталогам, в Windows поместите и прочитайте ваши файлы конфигурации из папки% APPDATA% … лучше создать там свою собственную подпапку. для Linux используйте $ HOME … снова создайте там подпапку, и лучше всего поставить ее перед точкой, чтобы скрыть ее. оба из них предоставляют разрешения на уровне приложения, тогда как относительные пути к месту установки приложения редко разрешаются.

0

Другие решения

Нашел решение, используя файлы конфигурации CMake, описанные в эта ссылка.

Я создаю шаблон конфигурации файла config.hpp.in

#ifndef CONFIG_HPP
#define CONFIG_HPP

#cmakedefine CLASSIFIER_LOCATION @CLASSIFIER_LOCATION@

#endif

Затем я устанавливаю местоположение файла и вызываю файл configure_file в моем CMakeLists.txt:

set(CLASSIFIER_LOCATION \"${CMAKE_CURRENT_SOURCE_DIR}/resources/toto.txt\")
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/config.hpp.in ${CMAKE_CURRENT_SOURCE_DIR}/config.hpp)

Это создало config.hpp, где cmake записал полный путь к местоположению файла ресурса. Мне просто нужно включить config.hpp везде, где мне это нужно.
Exemple config.hpp Linux

#ifndef CONFIG_HPP
#define CONFIG_HPP
#define CLASSIFIER_LOCATION "/home/vieux/workspace/IllustrationDetection/src/dll/resources/toto.txt"
#endif
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector