cmake之链接外部动态库

cmake不再使你在构建项目时郁闷地想自杀了。  --佚名KDE开发者

1.写在开头

  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} )

是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路径下。

你可能感兴趣的:(cmake)