一、Qt6CMake——查找、链接库
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)
-
搜索
Qt6Config.cmake
-
搜索
Qt6WidgetsConfig.cmake
和Qt6QuickConfig.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}")
2 target_link_libraries
因为CMake中使用Qt6时,模块命名空间采用了 Qt6::ModuleName
的形式。
所以链接的时候是 Qt6::Quick
target_link_libraries(ExampleProject PRIVATE Qt6::Quick Qt::Qml)