写在前面
本文转载自:
[1] cv_gordon. OpenCV和PCL的多版本管理 [EB/OL]. https://www.cnblogs.com/gdut-gordon/p/9164541.html, 2018-06-10/2021-08-28.
[2] 还是喜欢阴天. vtk编译问题踩坑-Ubuntu16.04编译切换pcl版本 [EB/OL]. https://zhuanlan.zhihu.com/p/220103511, 2020-09-06/2021-08-28.
一、CMake编译指定的OpenCV版本
设置库的路径同时显式指定版本(假定指定版本的opencv安装在 /usr/local 目录中)。
set(OpenCV_DIR /usr/local/opencv2/share/OpenCV)
FIND_PACKAGE( OpenCV 2.4.9 REQUIRED )
二、CMake编译指定的PCL版本 (好像不是很好用??)
关于pcl。如果需要使用ros携带的pcl库,在CMakeLists.txt中添加如下命令行,
解决方法:在CMakeLists中的find_package前加入这条语句:
set(PCL_DIR "/usr/lib/x86_64-linux-gnu/cmake/pcl") #该路径中存放*.cmake文件
find_package(PCL 1.7 REQUIRED)
CMakeLists的find_package命令是通过cmake文件来寻找指定的库版本和头文件路径的,这个路径一般设在了系统的环境变量里。
因为pcl-1.7默认的cmake文件就放在/usr/lib/x86_64-linux-gnu/cmake/pcl路径下,在CMakeLists中指定该路径后,系统就不会去默认寻找/usr/local/share/pcl-1.8路径下pcl-1.8的cmake文件了。你可以检查一下你电脑的这两个路径,看看是不是有pcl对应的cmake文件!
修改后cmake编译时输出:
-- Found PCL_MODELER: /usr/include/pcl-1.7
-- looking for PCL_IN_HAND_SCANNER
-- Found PCL_IN_HAND_SCANNER: /usr/include/pcl-1.7
-- looking for PCL_POINT_CLOUD_EDITOR
-- Found PCL_POINT_CLOUD_EDITOR: /usr/include/pcl-1.7
-- pcl link dir /usr/lib/x86_64-linux-gnu
-- pcl definition dir -DEIGEN_USE_NEW_STDVECTOR-DEIGEN_YES_I_KNOW_SPARSE_MODULE_IS_NOT_STABLE_YET-DFLANN_STATIC-Dqh_QHpointer
-- pcl PCL_DIR dir /usr/lib/x86_64-linux-gnu/cmake/pcl
注意:如果更改后还是没效果,建议把build文件夹删除后,重新执行cmake… & make,检查编译输出。
同理,如果需要指定源码安装的PCL库(比如 PCL-1.8),那么需要在CMakeLists中的find_package前加入这条语句:
set(PCL_DIR "/usr/local/share/pcl-1.8") #该路径中存放*.cmake文件
find_package(PCL 1.8 REQUIRED)
参考链接
[1] cv_gordon. OpenCV和PCL的多版本管理 [EB/OL]. https://www.cnblogs.com/gdut-gordon/p/9164541.html, 2018-06-10/2021-08-28.
[2] 还是喜欢阴天. vtk编译问题踩坑-Ubuntu16.04编译切换pcl版本 [EB/OL]. https://zhuanlan.zhihu.com/p/220103511, 2020-09-06/2021-08-28.