首先明确find_package()有两种搜索模式:
-
Module模式
搜索CMAKE_MODULE_PATH指定路径下面的FindXXX.cmake文件,在文件中定义了XXX_INCLUDE_DIRS和XXX_LIBRARIES变量的值。 -
Config模式
搜索XXX_DIR指定路径下面的XXXConfig.cmake文件,在文件中定义了XXX_INCLUDE_DIRS和XXX_LIBRARIES变量的值。CMake默认先采用Module模式在CMAKE_MODULE_PATH中进行搜索,其中CMAKE_MODULE_PATH可通过set进行指定路径。若找不到再采用Config模式进行搜索
OpenCV的.cmake文件:
OpenCV使用的是OpenCVConfig.cmake文件,所以对于不同版本的OpenCV,可以先使用 locate OpenCVConfig.cmake
查找其位置,确定位置后,在CMakeLists.txt中添例加set(OpenCV_DIR "/opt/ros/kinetic/share/OpenCV-3.3.1-dev")
便可找到指定版本的OpenCV。