如何从C ++库正确加载配置文件

时间:2012-10-16 10:12:24

标签: c++ resources cmake shared-libraries

我正在为图像分析任务编写一个小型库,我需要根据存储在文件中的信息初始化一些对象。这些文件随库一起提供。但是,在我的代码中,我不知道引用这些外部配置文件的正确方法。显然我不能参考配置文件的完整路径。但相对路径似乎也不是一个选项,因为我不确定这个路径是相对于共享库的位置,还是相对于与共享库链接的可执行文件的位置,还是相对于工作目录从中启动可执行文件。 目前,我的代码看起来像这样:

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

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

}

我使用OpenCV在Linux / Windows环境下使用C ++进行编码。我更喜欢便携式解决方案,不需要参考Boost或Qt。我使用CMake作为项目构建环境。

2 个答案:

答案 0 :(得分:0)

关于目录路径,在Windows下放置并从%APPDATA%文件夹中读取配置文件...最好在那里创建自己的子文件夹。对于Linux,使用$ HOME ...再次在那里创建一个子文件夹,最好在它前面添加一段时间使其隐藏。这两者都允许应用程序级权限,而很少允许相对于应用程序安装位置的路径。

答案 1 :(得分:0)

使用this link中解释的CMake配置文件找到解决方案。

我创建了一个模板配置文件config.hpp.in

#ifndef CONFIG_HPP
#define CONFIG_HPP

#cmakedefine CLASSIFIER_LOCATION @CLASSIFIER_LOCATION@

#endif

然后我设置文件位置并在我的CMakeLists.txt中调用configure_file:

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。 例如config.hpp Linux

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

#endif