读取配置文件失败_还在为Find_Package失败而烦恼吗?
![](/assets/blank.gif)
在学习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失败而烦恼吗?相关推荐
- java tomcat 读取配置文件端口_跟我学Java编程—应用读写项目配置文件的Properties类...
我们在开发软件项目时,经常需要读取项目的一些配置数据.例如,项目里用到的数据库链接地址.Tomcat服务端口号.数据文件备份地址等信息都需要放到一个配置文件里,由程序读取并获取.这样做的好处是,当需要 ...
- matplotlib安装成功但import失败_统信UOS安装失败,deepinv20.1国产操作系统安装成功...
我一直在等着uos成熟,当我知道这个消息之后,我就赶紧下载了. 但是安装到63%的时候,会卡死不动. 无论是硬盘安装还是u盘安装都不行. 我去网上找教程,官方教程居然让我用虚拟机装? 教程好像在对我说 ...
- python显示安装失败_关于python:安装失败并显示Requirements.txt,但可用于pip安装...
与使用pip直接安装时相比,在使用requirements.txt时出现一些奇怪的行为. 希望您能对此有所了解. 这可能与未解决的问题相同:pip install -r requirements.tx ...
- c# 再次尝试 连接失败_和平精英ios充值失败该怎么办
和平精英ios充值失败该怎么办?近期有小伙伴说自己用苹果手机充值却显示充值失败,这种情况该怎么解决呢?其实这不是大问题,看看下面的解决办法. 和平精英ios充值失败 和平精英ios充值失败只需要重新填 ...
- java调用dll 动态链接库(dll)初始化例程失败._动态链接库(DLL)初始化例程失败,是怎么回事?...
wzcdlg.dll 是系统文件,不要删除 文件wzcdlg.dll 包含在以下软件 * Windows XP Home Edition, Deutsch 更多信息 版本: 5.1.2600.1276 ...
- android tbs 内核加载失败_腾讯TBS初始化失败,加载失败问题(踩坑记录 64位手机无法加载x5)...
问题一:ndk配置的问题 //X5兼容64位手机 ndk { abiFilters "armeabi", "armeabi-v7a", "x86&qu ...
- 初始化mysql的数据库失败_初始化mysql的数据库失败怎么办
初始化mysql数据库失败的解决办法:首先找到并打开my.ini文件:然后注释掉my.ini文件中的datadir:最后根据提示把UTF8换成UTF8MB4即可. 安装MySQL8,安装时初始化数据库 ...
- null导入失败_当null检查非常失败时
null导入失败 免责声明 在继续之前,我必须指出,当我们对Java进行编程时,本文中描述的技术没有实际目的. 就像填字游戏或拼图. 它主要训练您的大脑进行逻辑思维,可能发展您的Java语言知识甚至您 ...
- php mysql 失败_在php中插入失败的数据mysql
我需要将记录添加到表'文字'中.正如您在下面的代码中看到的那样,失败会导致消息data insert failed.在php中插入失败的数据mysql 我已经试图改变一切,在线论坛建议,但它没有帮助. ...
最新文章
- 听研二师兄师姐报告收获
- python123 app下载_Python 逆向抓取 APP 数据
- SQL Server 2000详细安装过程及配置
- 8月13日见!三星Note 20国行版官宣:唯一悬念只剩价格
- git remote(远程仓库操作)
- 随想录(公司程序员的九层楼)
- MySQL text类型的最大长度
- Qt直接运行生成的exe文件提示“缺少Qt5Core.dll”的解决办法
- VirtualBox一类系统只能出现一个?
- NumPy库---文件操作
- Java对List集合排序
- 饥荒一直服务器没有响应,饥荒总是启动服务器进不去 | 手游网游页游攻略大全...
- 模拟win10系统开机加载的动画
- 电商后台管理系统--笔记
- 电赛总结(四)——波形发生芯片总结之AD9854
- 启用静态NVI的NAT的配置步骤及示例
- 【壁纸】动漫绝美壁纸
- VS2013使用教程总结(2)---显示行号
- Electron主进程和渲染进程之间通信
- 互联网日报 | 8月9日 星期一 | 字节跳动否认重启上市计划;TikTok全球下载量去年居首;中国代表团38金32银18铜收官...
热门文章
- mysql基础_月隐学python第22课
- python caffe 训练自己的模型_python接口调用已训练好的caffe模型测试分类方法
- ajax 局部页面替换innerhtml,ajax jquery 页面局部刷新的不同实现代码
- c iostream.源码_通达信《牛气冲天》指标,共振主升浪冲涨停,牛散经常用(附源码...
- GenXus学习笔记——Transaction的建立
- JavaScript三种创建构造函数的方式
- Java开发笔记(一百零三)线程间的通信方式
- Markdown列表
- Python字典的常用操作
- Gauss error function