1

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

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 作为项目构建环境。

4

2 回答 2

2

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

于 2012-10-16T12:00:02.360 回答
1

使用此链接中解释的 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.hppLinux

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

#endif
于 2012-10-16T12:59:15.833 回答