find_package

Cmake之深入理解find_package()的用法
刚刚接触Cmake的时候,对于find_package的用法以及背后的原理经常一头雾水,官方文档比较晦涩难懂,网上的博客也都讲解的比较片面。这里通过实战代码案例进行一下详细的总结讲解。帮助自己加深理解的同时,也希望帮到更多的初学者。 此处所有代码均可在我的github项目中找到,欢迎star。后续内容我也会持续更新。 话不多说进入正题。 本章节通过示例演示Cmake中find_package的用法。 注 :所有教程均在linux系统下测试通过,如果是windows和mac系统,可能会出现错误,需要自行调试修改 为了方便我们在项目中引入外部依赖包,cmake官方为我们预定义了许多寻找依赖包的Module,他们存储在 path_to_your_cmake/share/cmake- /Modules目录下。每个以 Find .cmake命名的文件都可以帮我们找到一个包。我们也可以在官方文档中查看到哪些库官方已经为我们定义好了,我们可以直接使用find_package函数进行引用 官方文档:Find Modules 。 我们以curl库为例,假设我们项目需要引入这个库,从网站中请求网页到本地,我们看到官方已经定义好了FindCURL.cmake。所以我们在CMakeLists.txt中可以直接用find_pakcage进行引用。 对于系统预定义的 Find .cmake 模块,使用方法一般如上例所示。 每一个模块都会定义以下几个变量 - _INCLUDE_DIR or _INCLUDES _LIBRARY or _LIBRARIES 你可以通过 _FOUND 来判断模块是否被找到,如果没有找到,按照工程的需要关闭 某些特性、给出提醒或者中止编译,上面的例子就是报出致命错误并终止构建。 如果 _FOUND 为真,则将 _INCLUDE_DIR 加入 INCLUDE_DIRECTORIES, 假设此时我们需要引入glog库来进行日志的记录,我们在Module目录下并没有找到 FindGlog.cmake。所以我们需要自行安装glog库,再进行引用。 安装 # clone该项目 git clone https://github.com/google/glog.git # 切换到需要的版本 cd glog git checkout v0.40 # 根据官网的指南进行安装 cmake -H.
Cmake之深入理解find_package()的用法