当前位置: 首页 > news >正文

QT采用cmake编译时文件解析

 CMakeLists.txt

# 设置版本要求
cmake_minimum_required(VERSION 3.16)
# 设置项目名
project(QtWidgetsApplication3 LANGUAGES CXX)#设置C++版本
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core)
find_package(Qt${QT_VERSION_MAJOR}COMPONENTSCoreGuiWidgets
)
# 自动调用MOC来转换文件
set(CMAKE_AUTOMOC ON) 
# 自动调用UIC来转换文件
set(CMAKE_AUTOUIC ON) 
# 自动调用RCC来转换文件
set(CMAKE_AUTORCC ON) set(PROJECT_SOURCESmain.cppQtWidgetsApplication3.uiQtWidgetsApplication3.hQtWidgetsApplication3.cpp
)add_executable(QtWidgetsApplication3 ${PROJECT_SOURCES})set_target_properties(QtWidgetsApplication3PROPERTIESWIN32_EXECUTABLE TRUE
)target_link_libraries(QtWidgetsApplication3PUBLICQt::CoreQt::GuiQt::Widgets
)

1. 设置CMake最低版本要求

cmake_minimum_required(VERSION 3.16)
  • 作用:指定构建项目所需的CMake最低版本为3.16。若当前版本低于此值,CMake会报错。
  • 说明:Qt 6对CMake版本要求较高(需≥3.16),此设置确保兼容性。

2. 定义项目基本信息

project(QtWidgetsApplication3 LANGUAGES CXX)
  • 作用:定义项目名称为QtWidgetsApplication3,并指定项目语言为C++。
  • 关键变量:自动生成PROJECT_SOURCE_DIR(项目源码路径)和PROJECT_BINARY_DIR(构建输出路径)。

3. 配置C++标准

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
  • 作用:
  • CMAKE_CXX_STANDARD:强制使用C++20标准编译代码。
  • CMAKE_CXX_STANDARD_REQUIRED:若编译器不支持C++20,则报错终止构建。

4. 查找Qt依赖包

find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core)
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core Gui Widgets)
  • 作用:
  1. 动态选择Qt版本:通过QT_VERSION_MAJOR变量(由第一个find_package自动设置)确定使用Qt5或Qt6。
  1. 加载核心模块:包含Core(基础功能)、Gui(图形界面)、Widgets(窗口控件)组件。
  • 参数说明:
  • REQUIRED:找不到依赖则报错。
  • COMPONENTS:指定必须的Qt模块。

5. 启用Qt元对象系统自动处理

set(CMAKE_AUTOMOC ON)  # 自动处理信号槽的MOC(元对象编译器)
set(CMAKE_AUTOUIC ON)  # 自动处理UI文件(.ui)的UIC(界面编译器)
set(CMAKE_AUTORCC ON)  # 自动处理资源文件(.qrc)的RCC(资源编译器)
  • 作用:简化Qt特有的元数据编译流程,避免手动调用mocuicrcc工具。

6. 定义项目源文件

set(PROJECT_SOURCESmain.cppQtWidgetsApplication3.ui  # Qt Designer设计的界面文件QtWidgetsApplication3.h   # 头文件(可能包含Q_OBJECT宏)QtWidgetsApplication3.cpp # 实现文件
)
  • 作用:将源文件、UI文件和头文件统一管理,方便后续构建。

7. 创建可执行目标

add_executable(QtWidgetsApplication3 ${PROJECT_SOURCES})
  • 作用:生成名为QtWidgetsApplication3的可执行文件,并关联所有源文件。

8. 配置Windows可执行文件属性

set_target_properties(QtWidgetsApplication3 PROPERTIES WIN32_EXECUTABLE TRUE)
  • 作用:在Windows平台下,将可执行文件标记为GUI应用程序(不显示控制台窗口)。

9. 链接Qt库

target_link_libraries(QtWidgetsApplication3PUBLICQt::Core    # Qt核心库Qt::Gui     # 图形基础库Qt::Widgets # 窗口控件库
)
  • 作用:
  • 链接依赖:将Qt模块链接到可执行目标。
  • 传递性:PUBLIC表示依赖会传递给其他依赖此目标的项目(如动态库)。
  • 说明:Qt::Core等是Qt提供的CMake导入目标,支持跨版本(Qt5/Qt6)兼容。

关键特性总结

  • 跨版本支持:通过动态选择Qt${QT_VERSION_MAJOR适应不同Qt版本。
  • 自动化构建:利用AUTOMOC等简化Qt元对象处理。
  • 模块化依赖管理:通过find_packagetarget_link_libraries精准控制库链接。

如需进一步优化,可添加对Qt插件路径的配置(如部署时需处理平台插件)或资源文件的嵌入。

相关文章:

  • IsaacSim Asserts 配置
  • Warcraft Logs [Classic] [WCL] Usage Wizard <HTOC>
  • matlab读取CMEMS海洋温度数据并调整图片的比例
  • Linux基础IO(九)之软链接
  • 前端面试真题集合(一)
  • QT聊天项目DAY06
  • 【开发心得】筑梦上海:项目风云录(16)
  • Workflow轻量级工作流引擎实现
  • C++高并发内存池ConcurrenMemoPool
  • mysql8.0.17以下驱动导致mybatis blob映射String乱码问题分析与解决
  • gis系统中如何提高shp大文件加载效率
  • B端可视化像企业数据的透视镜,看清关键信息
  • C 语 言 --- 指 针 3
  • jangow靶机笔记(Vulnhub)
  • 深度学习数据预处理:Dataset类的全面解析与实战指南
  • 在Windows创建虚拟环境如何在pycharm中配置使用
  • 【滑动窗口】最⼤连续 1 的个数 III(medium)
  • MLA(多头潜在注意力)原理概述
  • leetcode 2563. 统计公平数对的数目 中等
  • turtle库绘制进阶图形
  • 【社论】家政服务提质扩容,为何被一提再提
  • 广西东兰官方通报“村民求雨耕种”:摆拍,恶意炒作
  • 外交部介绍中印尼“2+2”机制首次部长级会议将讨论的议题
  • 《黄雀》:从“大案猎奇”向“民生写实”转变
  • 日薪100元散发“引流小卡片”,上海浦东警方抓获2名违法人员
  • 经济日报金观平:良好开局彰显经济韧性与潜力