CMake之find_package

通过find_package引入开源软件的库(动态或者静态库,或者仅包含头文件的库)。CMake官方,在cmake安装路径下的/share/cmake-<version>/Modules目录中,为我们提供了许多寻找依赖包的Find<PackageName>.cmake命名的文件。具体相关模块的介绍,可以查看官方文档:cmake-modules

注:在全量源码构建时,一般不会,也不能用cmake预定义的路径下的Find<PackageName>.cmake文件。

由于Windows中,编写动态库,并使用动态库,代码书写比较麻烦。因此,这一章节,将在win10 + wsl2 + Ubuntu环境下,实现相关的demo。

find_package一般支持两种查找库的方式:

  • Module模式
  • Config模式

Module模式

cmake将在CMAKE_MODULE_PATH路径下查找Find<PackageName>.cmake文件。如果在Module模式下未找到,将采用Config模式继续查找PackageName

注意

  • CMAKE_MODULE_PATH:必须指明到Find<PackageName>.cmake文件所在的具体详细的路径
  • find_package函数中的PackageNameFind<PackageName>.cmake文件名中的PackageName保持一致。
  • find_package函数中,最好使用REQUIRED参数,在未找到PackageName,将报告错误,提前识别构建工程中的错误。

在Module模式中,定义的Find<PackageName>.cmake文件内容,需要定义以下几个变量:

  • <PackageName>_FOUND: bool值,表示当前PackageName是否已找到。
  • <PackageName>_INCLUDE_DIR或者<PackageName>_INCLUDES: 表示当前对外提供的头文件接口所在的头文件目录。
  • <PackageName>_LIBRARIES或者<PackageName>_LIBRARY:表示提供的动态库集合。

当然,在Find<PackageName>.cmake文件中的几个变量,可另起他名,但在使用时,就不太方便。因此,还是建议使用约定俗成的变量名称。

示例

整个目录结构如下:

.
├── CMakeLists.txt
├── opensource
│   └── calculator
│       ├── CMakeLists.txt
│       ├── FindCalculator.cmake
│       ├── add.cpp
│       └── include
│           └── add.h
└── src
    ├── CMakeLists.txt
    └── main.cpp

各个cpp文件和头文件与之前相同,其他的CMakeLists.txt和cmake文件将一一列举。

./CMakeLists.txt文件内容:

cmake_minimum_required(VERSION 3.16)

project(find_package_demo VERSION 1.0.0)

set(CMAKE_CXX_COMPILER g++)

add_subdirectory(src) 

./src/CMakeLists.txt文件内容:

# 查找开源动态库 Calculator
set(CMAKE_MODULE_PATH ${C
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值