以ceres 和 OpenCV为例
我们在做工程的时候,经常会遇到不同的repo对库的依赖版本不同,比如有的repo依赖opencv3.4, 有的依赖Opencv4.5。如果版本找错了工程可能会编译不通过。如果同一台机器上的不同repo对同一库的依赖版本不同,处理起来就会非常的麻烦,反复卸了装,装了卸,相信很多朋友遇到过这个错误。下面以ceres 和 OpenCV为例来说明这个问题的解决方法。
先说OpenCV。不管机器上有多少个OpenCV,直接编译就行,编译后的目录里面找到OpenCVConfig.cmake 的上一级目录。
打开工程的cmakelist.txt 在findpackage(OpenCV ) 前面 增加 set(OpenCV_DIR path) , 这里的path就是所需版本的OpenCVConfig.cmake 所在的父目录。
notice:opencv 编译后就有OpenCVConfig.cmake,无需安装。如果一定要在机器上安装多个版本,那么采用下面的方法,编译OpenCV里面指定安装的目录 cmake -D CMAKE_INSTALL_PREFIX="/usr/local/OpenCV-4.5" ..,以避免不同版本的OpenCV发生覆盖。安装后可以采用 locate OpenCVConfig.cmake 所安装版本的OpenCVConfig.cmake,set(OpenCV_DIR path) path指的是OpenCVConfig.cmake的父目录。
这里有一个问题,我们更改了cmakelist文件,如果这个文件是被git管理的,每次提交前还需要取消对cmakelist的更改,否则,别人git pull 后,会编译不通过。那么采用如下的办法来处理:
cmakelist 不更改,而是在编译repo的时候