cmake不再使你在构建项目时郁闷地想自杀了。 --佚名KDE开发者
1.写在开头
- 有两种方式,一种是cmake自己内置的find_package,另一种是使用pkg-config。
2. find-package
cmake_minimum_required(VERSION 2.8)
find_package(OpenCV REQUIRED)
if(OpenCV_FOUND)
message(${OpenCV_INCLUDE_DIRS})
message(${OpenCV_LIBRARIES})
endif(OpenCV_FOUND)
使用这个命令时,cmake程序会在/usr/share/cmake-x.x/Modules/目录下,寻找FindOpenCV.cmake文件,通过这个文件,读取所有关于OpenCV库的安装信息。
奇怪的是,我的这个目录下,并没有FindOpenCV.cmake文件,但强大的find_package命令还是可以找到opencv的安装信息,怎么回事?
是因为,我安装的版本是cuda版,每次要寻找OpenCV时,它会先找到cuda,然后在cuda的配置文件里面,包含了OpenCV的安装信息。所以,我/usr/share/cmake-x.x/Modules/目录下,有一个FindCUDA.cmake文件。
另外,可以在CMakeLists.txt文件中,添加find_package的寻找路径。
set( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} <your path>)
是FindXXX.cmake文件的路径
3. pkg-config
cmake_minimum_required(VERSION 2.8)
find_package(PkgConfig)
pkg_check_modules(OpenCV opencv>=3.1.0)
if(OpenCV_FOUND)
message(${OpenCV_INCLUDE_DIRS})
message(${OpenCV_LIBRARIES})
endif(OpenCV_FOUND)
它寻找PKG_CONFIG_PATH路径下的xxx.pc文件,获取库的相关信息。
pkg-config --variable pc_path pkg-config
终端输入这个命令,可以查看PKG_CONFIG_PATH具体的值。这是我的值:
/usr/local/lib/x86_64-linux-gnu/pkgconfig
/usr/local/lib/pkgconfig
/usr/local/share/pkgconfig
/usr/lib/x86_64-linux-gnu/pkgconfig
/usr/lib/pkgconfig
/usr/share/pkgconfig
不知道为什么,基于debian的ubuntu总喜欢搞一个x86_64-linux-gnu文件夹。
对于编译安装了多个版本OpenCV库情况,只需要把编译库时生成的opencv.pc文件拷贝到这些目录下,就可以,或者添加opencv.pc路径到PKG_CONFIG_PATH变量。
我把最新版本的opencv.pc文件拷贝到/usr/lib/x86_64-linux-gnu/pkgconfig路径下。