CMake基础篇(六)——常用函数

前言:
   本篇文章介绍CMake常用函数。

1 find_package

&esmp; find_package是CMake中一个非常重要的命令,它的主要功能是在系统上查找外部项目或库,并将这些项目的配置信息集成到当前项目的构建过程中。这个命令使得CMake能够支持各种第三方库和工具链,简化了跨平台构建的复杂性。以下是find_package的一些关键功能和用法说明:

  • 查找库或项目:find_package负责搜索指定的库或项目,并设置一系列变量来描述找到的库或项目的路径、编译选项等。这些信息随后可用于链接库、包含头文件路径等。
  • 配置组件:许多现代库(如Qt5、Boost等)都是模块化的,find_package允许你指定需要哪些组件(如前所述的COMPONENTS Widgets)。这样可以只导入你实际需要的部分,而不是整个库的所有组件。
  • 可选性和强制性:通过REQUIRED或OPTIONAL关键字,可以指定查找失败时的行为。如果指定了REQUIRED,找不到指定的库或组件时,CMake配置将会失败;而OPTIONAL则允许找不到时不报错,继续配置过程。
  • 自定义搜索路径:你可以通过设置CMAKE_PREFIX_PATH或在调用find_package时直接传入HINTS或PATHS参数,来指导CMake在特定路径中搜索库或项目。
  • 自动生成导入目标:对于支持的库,find_package不仅设置变量,还会创建导入目标(imported targets),如${PROJECT_NAME}::${COMPONENT}格式的目标,可以直接用于target_link_libraries等命令,使得库的使用更加简洁和透明。
  • 模块和配置文件:CMake使用两种方式查找包:预定义的模块(位于CMake的模块目录中)和自定义的Find.cmake脚本。如果存在相应的模块或脚本,find_package会调用它们来执行具体的查找逻辑。

  总之,find_package是CMake构建系统中用于集成外部依赖的关键命令,它极大地增强了CMake配置的灵活性和自动化程度。
  比如 find_package(Qt5 COMPONENTS Widgets REQUIRED) 倒入Qt5的 Widgets 组建。