CMakeLists学习三、指定OpenCV, PCL版本
前言
- 前言
- OpenCV版本指定
- PCL版本指定
本篇记录一下在CMakeLists.txt中指定OpenCV, PCL的版本(可以举一反三到其他包的版本指定上)
首先需要明确CMakeLists的找包逻辑,可以参考find_package查找包,以及ld搜索链接库路径两篇博文。
OpenCV版本指定如果指定的opencv的路径在/usr/local下安装了(并且根据教程把/usr/local/lib放到LD_LIBRARY_PATH中保证ld能找到动态库),或者是通过sudo apt安装的二进制包,则可以直接在find_package
时指定版本:
# EXACT表示版本必须一致,否则大版本一致即可
# REQUIED表示必须找到该包,否则停止,于此相反的是QUIET,找不到包也不会报错
find_package(OpenCV 3.4.15 EXACT REQUIRED)
如果指定的opencv路径不满足以上条件,则需要通过set
指定找包路径,这个路径是opencv的.cmake
文件位置:
# 设定优先找包路径
set(OpenCV_DIR /usr/local/share/OpenCV)
# 然后find_package找opencv时优先查找上面这个路径下的.cmake文件
# 如果符合版本要求就使用,不符合就会去默认找包路径再其他opencv版本
find_package(OpenCV 3.4.15 EXACT REQUIRED)
PCL版本指定
PCL版本指定有个很有趣的地方,就是必须指定版本的第三位,否则就找不到这个指定的包(比如如果指定PCL 1.8,安装的版本是1.8.1和1.11.0,则cmake可能会使用1.11.0,如果指定EXACT,会报找不到对应的PCL版本)。
同样,假设PCL已经在默认搜索路径中了,那么可以直接:
find_package(PCL 1.8.1 EXACT REQUIRED)
还可以通过set
指定找包路径,这个路径是pcl的.cmake
文件位置:
set(PCL_DIR "/usr/local/share/pcl-1.11")
# 设定了PCL找包位置后,就会优先在这个路径找.cmake文件了
find_package(PCL REQUIRED)