1 find_package

find_package() 是 CMake 中用于查找外部库或模块的命令,目的是让项目能够使用系统中已安装的库。其具体参数和用法因模块或包的不同而有所差异,但通用格式如下:

find_package(<PackageName> [version] [REQUIRED] [COMPONENTS components...] [OPTIONAL_COMPONENTS components...] [NO_MODULE])
  • PackageName:要查找的包名,比如 OpenGL, Boost, Qt6, Threads 等。

  • version:可选。指定所需包的最小版本,例如 3.10。

  • REQUIRED:可选。如果找不到该包就会报错并终止配置过程。

  • COMPONENTS:可选。列出所需的子模块或组件(比如 Boost 的 system、filesystem)。

  • OPTIONAL_COMPONENTS: 可选。列出可选组件,找不到不会报错。 NO_MODULE 可选。禁用使用 Find<PackageName>.cmake 模块文件,强制只使用配置包(Config mode)。

举例:

find_package(Qt6 REQUIRED COMPONENTS Widgets Quick)
  1. 搜索 Qt6Config.cmake

  2. 搜索 Qt6WidgetsConfig.cmakeQt6QuickConfig.cmake

打印找到的库对应的头文件和库文件目录:

# 打印 Qt Quick 的包含路径
get_target_property(Qt6Quick_INCLUDE_DIRS Qt6::Quick INTERFACE_INCLUDE_DIRECTORIES)
message(STATUS "Qt6::Quick include dirs: ${Qt6Quick_INCLUDE_DIRS}")

# 打印 Qt Quick 链接库
get_target_property(Qt6Quick_LIBRARIES Qt6::Quick INTERFACE_LINK_LIBRARIES)
message(STATUS "Qt6::Quick linked libraries: ${Qt6Quick_LIBRARIES}")

alt text

alt text

alt text

因为CMake中使用Qt6时,模块命名空间采用了 Qt6::ModuleName 的形式。

所以链接的时候是 Qt6::Quick

target_link_libraries(ExampleProject PRIVATE Qt6::Quick Qt::Qml)