深入理解find_package

0. 摘要

这篇文章主要是讲解find_package的搜索方式, 虽然用起来很简单, 但是编译的时候出问题的也经常是这个find_package, 所以这篇文章结合官网的说明以及找到的靠谱博客探讨一下find_package的要点.

1.find_package的两种搜索模式

1.1. 模块模式Module

首先CMake默认就是Module模式, 在此模式下, CMake会搜索由程序开发者list命令指定的CMAKE_MODULE_PATH路径下文件Find<package>.cmake, 如果找不到再去CMake安装目录下的Module目录下找Find<package>.cmake文件, 如果找不到, CMake就会切换到配置模式来搜索库文件.

注意: CMAKE_MODULE_PATH
list of directories specifying a search path for CMake modules to be loaded by the the include() or find_package() commands before checking the default modules that come with CMake. By default it is empty, it is intended to be set by the project.

1.2. 配置模式Config

1.2.1. 如果在find_package命令中直接指定了CONFIG选项, 则CMake会跳过Module模式, 直接使用Config模式来寻找库文件.
1.2.2. 这种模式下, CMake会在某些路径下搜索<name>Config.cmake<lower-case-name>-config.cmake文件, 如果还找不到对应的package, 我们需要set一个<package>_DIR指令, 告诉config文件的路径(比如安装了不同版本的OpenCV, 就需要我们指定<package>_DIR路径).
1.2.3. 如果<package> _DIR设置的目录不包含配置文件, CMake将忽略它并从头开始搜索。(我本地尝试了一下, 还是挺智能的, 骗不到CMake: 我将OpenCV的查找路径指定到其他路径, CMake依然还是找到了).

If _DIR has been set to a directory not containing a configuration file CMake will ignore it and search from scratch.

1.3. 流程

在这里插入图片描述
1.3.1. 其他
Ubuntu 16.04.6 的CMake版本3.5.1(我使用的);
CLion2018自带的CMake版本3.10.3;

2. 参考资料

[1]. 深入理解CMake(3):find_package()的使用
[2]. 官网find_package详解
[3]. 现代CMake编程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值