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

[Qt] 什么是qmake与cmake

一、什么是 CMake

CMake 是一个 跨平台的构建系统(Build System Generator)
它的主要功能是:

根据项目的源代码和配置文件(CMakeLists.txt),生成本地构建系统(如 Makefile、Visual Studio 工程、Xcode 工程、Ninja 文件等)

CMake 本身并不直接编译代码,它是 一个自动生成构建规则的工具

比如:

  • 在 Linux 上,CMake 可以生成 Makefile,然后你用 make 来真正编译
  • 在 Windows 上,它可以生成 .sln(Visual Studio 解决方案文件),你再用 VS 打开编译
  • 在 macOS 上,它可以生成 Xcode 工程文件

举个例子:

mkdir build
cd build
cmake ..
make

这里:

  • cmake .. 会读取上层目录中的 CMakeLists.txt,生成对应平台的构建文件
  • make 才是真正调用编译器(如 g++)去编译、链接

二、什么是 qmake

qmakeQt 官方自带的构建系统工具,主要用于 Qt 项目

它的作用与 CMake 类似,也能生成 Makefile,然后通过 make 进行编译
qmake 专为 Qt 项目设计,它会自动处理:

  • Qt 模块(QT += widgets
  • .ui 文件(自动调用 uic
  • .qrc 资源文件
  • .moc 元对象编译(生成信号槽支持)

一个简单的 qmake 项目文件(*.pro)示例:

QT += widgets
SOURCES += main.cpp mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui

然后运行:

qmake
make

qmake 会自动处理 moc/uic/rcc 等 Qt 专有步骤,非常方便

三、CMake 与 qmake 的区别

对比点CMakeqmake
适用范围通用的跨平台构建系统专门用于 Qt 项目
配置文件CMakeLists.txt.pro
生成目标Makefile / VS 工程 / Xcode 等Makefile
扩展性非常强,可与第三方库轻松集成较弱,主要用于 Qt
生态现代 C++ 项目主流选择(Qt 6 也推荐)Qt 4/5 时代常用
Qt 6 支持官方推荐使用 CMake已逐步被淘汰

Qt 6 开始,官方已弃用 qmake,推荐完全转向 CMake

四、CMake / qmake 与 “编译” 的区别

这三者的关系可以理解为:

阶段工具作用
1️⃣ 配置阶段CMake / qmake生成构建规则(Makefile / VS 工程)
2️⃣ 构建阶段make / MSBuild / ninja按规则实际调用编译器
3️⃣ 编译器阶段g++ / clang / cl.exe真正把 .cpp 编译为 .o、链接成 .exe
  • CMake/qmake:告诉系统“项目怎么编译”
  • make:执行编译计划
  • g++ 等编译器:执行实际编译

五、为什么 Qt Creator 不用你写 .pro 文件也能编译

其实 Qt Creator 在背后 自动帮你生成了 qmake 工程文件

当你在 Qt Creator 里点击「新建项目 → Qt Widgets 应用」时,它会:

  1. 自动生成 .pro 文件(或 .pro.user

  2. 自动配置好:

    QT += core gui widgets
    SOURCES += main.cpp mainwindow.cpp
    HEADERS += mainwindow.h
    FORMS += mainwindow.ui
    
  3. 自动调用 qmake → make → g++/MinGW/MSVC

所以你没看到 .pro 文件,是因为 Qt Creator 在后台帮你做了

为什么 CMake 必须自己写 CMakeLists.txt

CMake 是一个通用工具,它不知道你的项目属于 Qt,也不知道你要编译哪些源文件
你得用 CMakeLists.txt 明确告诉它

比如:

  • 哪些 .cpp 要编译?
  • 要用哪个 Qt 模块?
  • 生成的可执行文件叫什么名字?
  • 链接哪些库?

六、一个最小可运行的 Qt CMake 示例

下面是一个最简单的 Qt Widgets 应用的 CMake 配置文件
在 Qt Creator 里:

  1. 新建项目 → 选择 “Qt Widgets Application”;
  2. 在选择构建系统那一步,选 CMake 而不是 qmake
  3. Qt Creator 会自动生成类似上面的 CMakeLists.txt,并帮你配置好 Qt 模块

文件结构

MyQtApp/
├── CMakeLists.txt
├── main.cpp
└── mainwindow.ui

CMakeLists.txt

cmake_minimum_required(VERSION 3.16)
project(MyQtApp VERSION 1.0 LANGUAGES CXX)# 告诉 CMake 我们要用 Qt6
find_package(Qt6 REQUIRED COMPONENTS Widgets)# 启用 Qt 自动处理 .ui / .qrc / .moc
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)# 设置源文件
set(SOURCESmain.cpp
)# 生成可执行文件
add_executable(MyQtApp ${SOURCES})# 链接 Qt 库
target_link_libraries(MyQtApp PRIVATE Qt6::Widgets)

解释一下

行号说明
1声明 CMake 最低版本
2定义项目名和语言
5告诉 CMake:我需要 Qt6 的 Widgets 模块
8-10启用自动生成 moc/uic/rcc 文件(Qt 信号槽、UI、资源)
13告诉 CMake 要编译哪些源文件
16定义生成一个可执行文件
19链接 Qt 库

编译方式(命令行)

mkdir build
cd build
cmake ..
cmake --build .

这样就能生成可执行文件 MyQtApp(Windows 下为 .exe

http://www.dtcms.com/a/495486.html

相关文章:

  • DevOps学习笔记
  • DevOps是什么,有什么作用,一般用来干嘛
  • Go语言:关于导包的两个重要说明
  • 21 种网络攻击方式,如何有效防护!
  • 工厂 电商网站建设WordPress网易云插卡
  • STM32H743-ARM例程23-USB_HID
  • 丽水微信网站建设哪家好阿里巴巴国际站坑人
  • 网站通知发送邮件广州 深圳 外贸网站建设公司
  • LOL实时数据推送技术揭秘:WebSocket在电竞中的应用
  • STC89C52RC---坤坤铁山靠
  • 幽冥大陆(十五)SIM300 拨打电话和短信——东方仙盟筑基期
  • SpringBoot校园二手商城系统
  • 贸易网站建设一个网站建设需要多少钱
  • 网站查询空间商企业不开了网站备案吗
  • iframe内嵌子系统可返回
  • 【读书笔记】《巨人的工具》
  • 【实战详解】MySQL 8.0递归查询终极教程:附组织架构/分类树完整代码
  • 最新网站开发工具东莞推广外包
  • 双目测距实战3-立体匹配
  • 战斗系统架构:为什么游戏战斗适合ECS架构?
  • 【C语言加油站】C语言文件操作完全指南:feof、ferror与缓冲区机制详解
  • 做seo怎么设计网站响应式网站软件
  • 怎么样建网站卖东西可以入侵的网站
  • 17、Centos9 安装 1Panel
  • Linux学习笔记--GPIO控制器驱动
  • 重庆制作手机网站如何看一个站点是不是有wordpress
  • 网站如何在推广设计公司logo软件
  • 价值1w的数据分析课知识点汇总-excel使用(第一篇)
  • android取消每次u盘插入创建无用(媒体)文件夹
  • 个人如何办网站1m的带宽做网站可以吗