本文介绍 CMake 中两种查找库的方式:find_package 以及 pkg_check_modules 的用法与区别。
find_package
如果编译软件使用了外部库,事先并不知道它的头文件和链接库的位置,得在编译和链接命令中加上包含它们的查找路径,CMake 使用 find_package 命令来解决这个问题。
FIND_PACKAGE( <name> [version] [EXACT] [QUIET] [NO_MODULE] [ [ REQUIRED | COMPONENTS ] [ componets... ] ] )
这条命令执行后,CMake 会到变量CMAKE_MODULE_PATH 指示的目录下查找文件 Findname.cmake 并执行;
只要找到包,就会定义下面这些变量(都在 Findname.cmake 文件中设置):
<NAME>_FOUND
<NAME>_INCLUDE_DIRS or <NAME>_INCLUDES
<NAME>_LIBRARIES or <NAME>_LIBRARIES or <NAME>_LIBS
<NAME>_DEFINITIONS
要使用库name,我们在顶层目录中的 CMakeLists.txt 文件中,检查变量**NAME_FOUND** 来确定包是否被找到(大部分包的这些变量中的包名是全大写的,有些包则使用包的实际大小写)
如果找到这个包,我们用**NAME_INCLUDE_DIRS**调用 include