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