(九)查找外部依赖包

0 阅读2分钟

使用 find_package() 命令

在现代C++项目中,依赖外部库是非常普遍的。CMake提供了 find_package() 命令来查找和配置这些外部依赖包,这是CMake生态系统中最重要的功能之一。

image.png

参数详解:

  • PackageName:要查找的包名
  • version:需要的版本号(如 2.4.8)
  • EXACT:要求版本完全匹配
  • QUIET:不输出查找过程信息
  • REQUIRED:如果找不到包,则报错终止配置
  • COMPONENTS:需要的包组件列表
  • OPTIONAL_COMPONENTS:可选的包组件

image.png

查找结果验证

image.png

配置变量和导入目标

成功执行 find_package() 后,通常会定义以下变量和目标:

我说白了,CMake 找外部包,一般只用这两个命令

image.png

使用示例:

1.找OpenCV库:

image.png

2.找Qt5:

image.png

两种模式(CMake 内部机制)

find_package 有两种工作模式,你不用深究,但要知道:

  1. Config 模式(现代 CMake 推荐)

库自带 xxxConfig.cmake

image.png

CMake 直接读取,最稳定、最标准。

  1. Module 模式(兼容老库)

CMake 自带 Findxxx.cmake 脚本

image.png

现代 CMake 最佳风格(强烈推荐)

不要再用老式变量!用 命名空间目标(::),更干净、更安全:

image.png

找不到库怎么办

xxx_DIR = 告诉 CMake:“你要找的库,就在这个文件夹里!别瞎找了!”

  • 它不是 CMake 自带的变量
  • 它不是固定名字
  • 它是专门配合 find_package 使用的路径变量

关键结论(你最关心的)

当 CMake 找不到库时,如果你设置了 xxx_DIR,CMake 会自动去这个路径里找!

这是解决 CMake 报 Could NOT find xxx 最常用、最有效的方法。

image.png

xxx_DIR必须指向什么路径:

image.png

常用包写法速查表

命令
OpenCVfind_package(OpenCV REQUIRED)
Qt5find_package(Qt5 COMPONENTS Core Widgets)
Boostfind_package(Boost COMPONENTS system)
Pythonfind_package(Python3 REQUIRED)
Eigenfind_package(Eigen3 REQUIRED)
FFmpegfind_package(FFmpeg REQUIRED)
CUDAfind_package(CUDAToolkit REQUIRED)