cmake find_package 使用笔记

目录

  • [1 find_package](#1 find_package)
  • [2 config mode](#2 config mode)
    • [2.1 搜索的文件名](#2.1 搜索的文件名)
    • [2.2 搜索路径](#2.2 搜索路径)
  • [3 module mode](#3 module mode)
    • [3.1 搜索的文件名](#3.1 搜索的文件名)
    • [3.2 搜索路径](#3.2 搜索路径)
  • 参考

1 find_package

这是官方文档

下面是学习总结:

首先是find_package的作用是什么?引入预编译的库。

find_package有两种模式:config mode和module mode。config mode使用于cmake系库的引入,反之就是module mode。

2 config mode

bash 复制代码
find_package(SomeThing
  NAMES
    SameThingOtherName   # Another name for the package
    SomeThing            # Also still look for its canonical name
)

2.1 搜索的文件名

bash 复制代码
# 核心文件
<PackageName>Config.cmake or <LowercasePackageName>-config.cmake
# 版本信息
<PackageName>ConfigVersion.cmake or <LowercasePackageName>-config-version.cmake

2.2 搜索路径

  1. 默认搜索路径前缀,注意这里是前缀,cmake会在其后的 lib/cmake/ 下去找。linux默认在 /usrwindows 默认在 Program Files
  2. 可以在 CMAKE_PREFIX_PATH 里追加自定义路径前缀,有多种方法,比如
bash 复制代码
# 在CMakeLists.txt中
set(CMAKE_PREFIX_PATH /path/to/libA;/path/to/libB)

# 在cmake配置的时候
cmake .. -DCMAKE_PREFIX_PATH=/path/to/libA;/path/to/libB

# 设置环境变量
# linux
export CMAKE_PREFIX_PATH=/path/to/libA:/path/to/libB
# windows
set CMAKE_PREFIX_PATH="/path/to/libA;/path/to/libB"
  1. 指定某些包的搜索路径,注意不是前缀,比如
bash 复制代码
# 搜索的报名为 SomePackage
set(SomePackage_DIR /opt/somepackage/lib/cmake/SomePackage)

3 module mode

如果module mode搜索失败,才会进入config mode。在module mode 搜索的文件名是:

3.1 搜索的文件名

bash 复制代码
Find<PackageName>.cmake

cmake维护了常用库的这个搜索文件。如果cmake没有维护,就只能参考这个教程自己写了。

3.2 搜索路径

搜索路径可以通过CMAKE_MODULE_PATH设置。

bash 复制代码
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
include(Foo) # Loads ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Foo.cmake
find_package(Bar) # Loads ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindBar.cmake

参考

相关推荐
AlexMercer101234 分钟前
【操作系统】操作系统期末考试 简答题 焚决
c语言·经验分享·笔记·操作系统
峥无38 分钟前
《二叉搜索树:动态数据管理的利器,平衡树的基石》
开发语言·c++·二叉搜索树
CoderCodingNo39 分钟前
【GESP】C++五级真题(数论, 贪心思想考点) luogu-B4070 [GESP202412 五级] 奇妙数字
开发语言·c++·算法
AAA.建材批发刘哥1 小时前
04--C++ 类和对象下篇
linux·c++·经验分享·青少年编程
stolentime1 小时前
洛谷P4417 [COCI 2006/2007 #2] STOL 题解
c++·coci
我先测了1 小时前
零第三方工具!Win10 自带磁盘管理给 C 盘扩容「纯官方」操作笔记
windows·笔记·扩容·c盘扩容
三品吉他手会点灯1 小时前
STM32F103 学习笔记-21-串口通信(第2节)-STM32串口功能框图讲解
笔记·stm32·单片机·嵌入式硬件·学习
AI视觉网奇1 小时前
nvidia 插件安装使用笔记
笔记·ue5
CoderCodingNo1 小时前
【GESP】C++五级真题(数论考点) luogu-P11961 [GESP202503 五级] 原根判断
开发语言·c++
代码游侠2 小时前
应用——Web服务器项目代码解析
运维·服务器·开发语言·前端·笔记·html