在学习ubuntu的过程中,经常会遇到以下问题:

Could not find a package configuration file provided by "xxx" with any of the following names:xxxpackageConfig.cmake
xxxpackage-config.cmake

有时根据别人的提示修改一下也可以解决问题,但还是觉得一脸懵逼,对其原理并不明白。接下来还是一起深入学习一下,但并不能做到十分全面与准确哈!谁让我平时还得画图拧螺钉呢!

解决Find_package()无法配置成功的问题:

Find_Package()的基本作用就跳过不讲了......

首先,我们简单了解下Find_Package()的原理,它在搜索包时有两种模式:“Module(模块)”模式和“Config(配置)”模式

在Module模式中,CMake会搜索所有名为Find<package>.cmake的文件,此文件的路径由安装CMake时指定的CMAKE_MODULE_PATH变量指定。如果找到了该文件,它会被CMAKE读取并进行处理,会生成以下相关变量:

// 是否发现该库
<LibaryName>_FOUND
// 头文件
<LibaryName>_INCLUDE_DIR or <LibaryName>_INCLUDES
// 库文件
<LibaryName>_LIBRARY or <LibaryName>_LIBRARIES

如果在Module模式中没有找到Find<package>.cmake文件,那么会进入Config模式,Cmake会搜索名为<package>Config.cmake与<package>-config.cmake文件,Cmake路径有很多,有兴趣的可以参考下CMake官方教程,这里提供一个常用路径:/usr/local/lib/cmake/xxx/。该配置文件中指定了依赖库的头文件、库文件地址。通过Config模式找到依赖库后,同样也是会生成库的相应变量,供调用者使用。如果没有找到该配置文件,可以自己创建一个,并不复杂。

例子—yaml-cpp库的调用

前段时间项目中需要依赖yaml-cpp库,在find_package(yaml-cpp REQUIRED)时总是失败,测试了下别人的解决方式也无效,一直提示错误:

Could not find a package configuration file provided by "xxx" with any of the following names:
yaml-cppConfig.cmake
yaml-cpp-config.cmake

于是,按照上述方法自己创建了yaml-cppConfig.cmake文件,并将其移到/usr/local/lib/cmake/yaml-cpp/地址下。

FIND_PATH(YAML_CPP_INCLUDE_DIR yaml_cpp.h/usr/local/include/usr/include)FIND_LIBRARY(YAML_CPP_LIBRARIES NAMES YAML_CPPPATHS/usr/local/lib/usr/lib)

在配置文件中,指定了yaml-cpp头文件与库文件的地址,该地址可在你sudo make install库时得到的。

然后,在CmakeList文件中调用yaml-cpp库,果然奏效了!

find_package(yaml-cpp REQUIRED)include_directories(include${catkin_INCLUDE_DIRS}${YAML_CPP_INCLUDE_DIR}add_executable(yaml_cpp_test yaml_cpp_test.cpp)
target_link_libraries(yaml_cpp_test ${YAML_CPP_LIBRARIES})

虽然成功了解决了我的问题,但应该还有更简单的解决方式,或者还有没有其他通用办法?请大佬留言。

读取配置文件失败_还在为Find_Package失败而烦恼吗?相关推荐

  1. java tomcat 读取配置文件端口_跟我学Java编程—应用读写项目配置文件的Properties类...

    我们在开发软件项目时,经常需要读取项目的一些配置数据.例如,项目里用到的数据库链接地址.Tomcat服务端口号.数据文件备份地址等信息都需要放到一个配置文件里,由程序读取并获取.这样做的好处是,当需要 ...

  2. matplotlib安装成功但import失败_统信UOS安装失败,deepinv20.1国产操作系统安装成功...

    我一直在等着uos成熟,当我知道这个消息之后,我就赶紧下载了. 但是安装到63%的时候,会卡死不动. 无论是硬盘安装还是u盘安装都不行. 我去网上找教程,官方教程居然让我用虚拟机装? 教程好像在对我说 ...

  3. python显示安装失败_关于python:安装失败并显示Requirements.txt,但可用于pip安装...

    与使用pip直接安装时相比,在使用requirements.txt时出现一些奇怪的行为. 希望您能对此有所了解. 这可能与未解决的问题相同:pip install -r requirements.tx ...

  4. c# 再次尝试 连接失败_和平精英ios充值失败该怎么办

    和平精英ios充值失败该怎么办?近期有小伙伴说自己用苹果手机充值却显示充值失败,这种情况该怎么解决呢?其实这不是大问题,看看下面的解决办法. 和平精英ios充值失败 和平精英ios充值失败只需要重新填 ...

  5. java调用dll 动态链接库(dll)初始化例程失败._动态链接库(DLL)初始化例程失败,是怎么回事?...

    wzcdlg.dll 是系统文件,不要删除 文件wzcdlg.dll 包含在以下软件 * Windows XP Home Edition, Deutsch 更多信息 版本: 5.1.2600.1276 ...

  6. android tbs 内核加载失败_腾讯TBS初始化失败,加载失败问题(踩坑记录 64位手机无法加载x5)...

    问题一:ndk配置的问题 //X5兼容64位手机 ndk { abiFilters "armeabi", "armeabi-v7a", "x86&qu ...

  7. 初始化mysql的数据库失败_初始化mysql的数据库失败怎么办

    初始化mysql数据库失败的解决办法:首先找到并打开my.ini文件:然后注释掉my.ini文件中的datadir:最后根据提示把UTF8换成UTF8MB4即可. 安装MySQL8,安装时初始化数据库 ...

  8. null导入失败_当null检查非常失败时

    null导入失败 免责声明 在继续之前,我必须指出,当我们对Java进行编程时,本文中描述的技术没有实际目的. 就像填字游戏或拼图. 它主要训练您的大脑进行逻辑思维,可能发展您的Java语言知识甚至您 ...

  9. php mysql 失败_在php中插入失败的数据mysql

    我需要将记录添加到表'文字'中.正如您在下面的代码中看到的那样,失败会导致消息data insert failed.在php中插入失败的数据mysql 我已经试图改变一切,在线论坛建议,但它没有帮助. ...

最新文章

  1. 听研二师兄师姐报告收获
  2. python123 app下载_Python 逆向抓取 APP 数据
  3. SQL Server 2000详细安装过程及配置
  4. 8月13日见!三星Note 20国行版官宣:唯一悬念只剩价格
  5. git remote(远程仓库操作)
  6. 随想录(公司程序员的九层楼)
  7. MySQL text类型的最大长度
  8. Qt直接运行生成的exe文件提示“缺少Qt5Core.dll”的解决办法
  9. VirtualBox一类系统只能出现一个?
  10. NumPy库---文件操作
  11. Java对List集合排序
  12. 饥荒一直服务器没有响应,饥荒总是启动服务器进不去 | 手游网游页游攻略大全...
  13. 模拟win10系统开机加载的动画
  14. 电商后台管理系统--笔记
  15. 电赛总结(四)——波形发生芯片总结之AD9854
  16. 启用静态NVI的NAT的配置步骤及示例
  17. 【壁纸】动漫绝美壁纸
  18. VS2013使用教程总结(2)---显示行号
  19. Electron主进程和渲染进程之间通信
  20. 互联网日报 | 8月9日 星期一 | 字节跳动否认重启上市计划;TikTok全球下载量去年居首;中国代表团38金32银18铜收官...

热门文章

  1. mysql基础_月隐学python第22课
  2. python caffe 训练自己的模型_python接口调用已训练好的caffe模型测试分类方法
  3. ajax 局部页面替换innerhtml,ajax jquery 页面局部刷新的不同实现代码
  4. c iostream.源码_通达信《牛气冲天》指标,共振主升浪冲涨停,牛散经常用(附源码...
  5. GenXus学习笔记——Transaction的建立
  6. JavaScript三种创建构造函数的方式
  7. Java开发笔记(一百零三)线程间的通信方式
  8. Markdown列表
  9. Python字典的常用操作
  10. Gauss error function