当前位置: 首页 > 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插件路径的配置(如部署时需处理平台插件)或资源文件的嵌入。

http://www.xdnf.cn/news/26515.html

相关文章:

  • 基于大语言模型的自动化单元测试生成系统及测试套件评估方法
  • 在Windows创建虚拟环境如何在pycharm中配置使用
  • 游戏引擎学习第236天:GPU 概念概述
  • 交换网络基础
  • JDOM处理XML:Java程序员的“乐高积木2.0版“
  • 【大模型】 LangChain框架 -LangChain用例
  • kafka的零拷贝技术
  • 数据结构——栈以及相应的操作
  • MAUI项目iOS应用以进 App Store 分发
  • Leakcanary框架分析:他是如何检测内存泄漏的?四大引用;Heap Dump的实现,设计原则
  • Windows进程管理
  • 宇树机器狗go2—slam建图(1)点云格式
  • DevOps 进阶指南:如何让工作流更丝滑?
  • PHP获取大文件行数
  • 【MySQL】004.MySQL数据类型
  • P-Tuning提示词微调
  • 多人3D游戏完整实现方案
  • C++游戏服务器开发之⑦redis的使用
  • 基于LSTM-AutoEncoder的心电信号时间序列数据异常检测(PyTorch版)
  • 山东科技大学深度学习考试回忆
  • Java:使用Maven构建项目无src解决方案
  • 【java实现+4种变体完整例子】排序算法中【冒泡排序】的详细解析,包含基础实现、常见变体的完整代码示例,以及各变体的对比表格
  • 单元测试的一般步骤
  • RenderStage::runCameraSetUp
  • 如何查看HTTP状态码?
  • 【25软考网工笔记】第二章(6)脉冲编码调制PCM、通信和交换方式
  • Macvlan 网络类型详解:特点、优势与局限性
  • go-map+sync.map的底层原理
  • 【测试文档】项目测试文档,测试管理规程,测试计划,测试文档模版,软件测试报告书(Word)
  • FFmpeg+Nginx+VLC打造M3U8直播