
目录Qt 5.9.9 + MSVC2015 64bit + qmake 超详细全流程手册第一部分 基础概念 工程文件全景(人工阶段)1.1 整套工具链分工(底层定位)1.2 工程目录结构(影子构建,Qt 标准规范)目录分层1.3 逐个文件深度详解1.3.1 .pro 工程文件(qmake 核心配置文件)完整可运行示例(带全注释)关键约束1.3.2 .h 头文件(重点:Q_OBJECT 宏规则)强制规则(高频报错点)1.3.3 .cpp 源文件1.3.4 .ui 界面文件1.3.5 .qrc Qt 资源文件1.3.6 .rc Windows 原生资源文件(可选)1.3.7 .pro.user 文件第二部分 阶段 1:qmake 生成编译规则(从 .pro → Makefile)2.1 执行时机与命令2.2 qmake 完整工作流程(隐性动作拆解)2.3 qmake 全部输出文件 作用2.4 核心约束第三部分 阶段 2:jom 启动编译调度(总控入口)3.1 jom 与 nmake 区别3.2 jom 核心能力3.3 整体调度链路第四部分 阶段 3:Qt 预处理工具(非 C++ 文件转 C++ 代码)4.1 uic.exe (UI 编译器,处理 .ui)执行命令(Makefile 自动调用)输入输出生成代码细节运行逻辑4.2 rcc.exe (资源编译器,处理 .qrc)执行命令输入输出底层原理4.3 moc.exe (元对象编译器,Qt 灵魂)设计背景执行命令输入输出moc 生成的代码明细(逐段说明)致命约束 报错对应4.4 rc.exe (MSVC 原生资源编译器,处理 .rc)执行命令第五部分 阶段 4:cl.exe MSVC 编译(源码 → 目标文件 .obj)5.1 编译输入文件全集5.2 完整编译命令 + 逐参数解析Release 版本完整指令高危坑点5.3 cl.exe 输出产物第六部分 阶段 5:link.exe MSVC 链接(.obj → 可执行文件 .exe)6.1 链接输入文件全集6.2 完整链接命令 + 参数解析6.3 链接产物(Debug / Release 区分)Debug 模式(调试版)Release 模式(发行版)6.4 链接阶段经典报错根源第七部分 阶段 6:编译后依赖 部署(可运行闭环)7.1 依赖 1:MSVC 运行库7.2 依赖 2:Qt 动态库 插件第八部分 阶段 7:文件清理(中间文件运维)第九部分 全流程终极时序图(完整闭环)第十部分 全局核心规则总结(避坑速查)Qt 5.9.9 + MSVC2015 64bit + qmake 超详细全流程手册基于 Windows 平台,从工程概念、工具原理、文件细节、命令行参数、编译链路、内存布局、报错根源、增量编译、影子构建、调试部署、清理运维做逐层拆解,覆盖每一个隐性动作、底层逻辑、约束规则,做到无死角说明。统一环境基线操作系统:Windows 10/11 64 位Qt 版本:Qt 5.9.9编译套件:Desktop Qt 5.9.9 MSVC2015 64bit构建系统:qmake + jom(Qt 默认,替代微软 nmake)编译器:MSVC2015cl.exe(C/C++ 前端)链接器:MSVC2015link.exe附属工具:Qt (moc/uic/rcc)、MSVC (rc.exe)、部署 (windeployqt)工程类型:Qt Widgets GUI 应用程序第一部分 基础概念 工程文件全景(人工阶段)1.1 整套工具链分工(底层定位)先区分两大阵营,全程互不混淆:Qt 预处理工具(跨平台,和编译器无关)uic.exe:UI 界面编译器rcc.exe:资源编译器moc.exe:元对象编译器(Qt 信号槽核心)MSVC 原生工具链(Windows 专属编译 / 链接)jom.exe/nmake.exe:任务调度器(解析 Makefile,串行 / 并行执行命令)cl.exe:C/C++ 代码编译器(源码 → 目标文件)link.exe:链接器(目标文件 + 库 → 可执行程序)rc.exe:Windows 原生资源编译器(图标、版本、清单)辅助工具qmake.exe:工程配置生成器(.pro → Makefile)windeployqt.exe:Qt 依赖部署工具1.2 工程目录结构(影子构建,Qt 标准规范)Qt 强制使用影子构建(Shadow Build),目的:源码目录纯净、多编译模式 / 多套件隔离、防止中间文件污染源码。目录分层plaintextDemoProject/ # 项目根目录(源码根目录) ├─ Demo.pro # qmake 工程配置文件 ├─ main.h / main.cpp # 业务源码 ├─ mainwindow.h / .cpp # 窗口类源码(含 Q_OBJECT) ├─ mainwindow.ui # 界面 XML 文件 ├─ res.qrc # Qt 资源文件 ├─ app.rc # Windows 原生资源文件(可选) └─ Demo.pro.user # Qt Creator 本地用户配置(仅IDE使用) build-Demo-MSVC2015-Debug/ # Debug 构建目录(影子目录1) build-Demo-MSVC2015-Release/# Release 构建目录(影子目录2)源码目录:仅存放手写 / IDE 生成的原始文件,编译全程不产生任何中间文件。构建目录:所有预处理代码、目标文件、exe、调试文件、日志全部生成在这里。切换 Debug/Release、切换 x86/x64、切换 MSVC/MinGW 都会生成独立构建目录,完全隔离。1.3 逐个文件深度详解1.3.1.pro工程文件(qmake 核心配置文件)本质:qmake 的脚本语言,描述工程模块、文件列表、编译规则、路径、宏、平台特性。完整可运行示例(带全注释)qmake# ===================== 1. 基础工程配置 ===================== TEMPLATE = app # 工程类型:app=可执行程序;lib=库;subdirs=多子工程 TARGET = DemoApp # 最终生成的 exe 名称 CONFIG += qt warn_on # 启用Qt、启用编译警告 CONFIG -= console # 关闭控制台窗口(GUI程序必备) # ===================== 2. 依赖 Qt 模块 ===================== # Qt5 必须显式声明依赖模块,缺模块直接编译失败 QT += core gui widgets # ===================== 3. 源码/资源文件列表 ===================== # C++ 源文件 SOURCES += \ main.cpp \ mainwindow.cpp # C++ 头文件 HEADERS += \ mainwindow.h # UI 界面文件(Qt Designer 生成) FORMS += \ mainwindow.ui # Qt 资源文件(图片、样式、字体) RESOURCES += \ res.qrc # Windows 原生资源文件(图标、版本、manifest,可选) RC_FILE += app.rc # ===================== 4. 路径配置(可选) ===================== INCLUDEPATH += ./include # 自定义头文件目录 LIBS += -L./lib -lThirdLib # 第三方库目录+库名 # ===================== 5. 平台区分配置(Windows 专属) ===================== win32 { # Windows 平台额外配置 DESTDIR = bin # 最终exe输出到 bin 目录 }关键约束文件列表换行必须用\续行符;QT += xxx漏写模块,会出现头文件找不到、链接缺失符号;修改.pro文件后,必须重新执行 qmake,否则新配置不生效。1.3.2.h头文件(重点:Q_OBJECT 宏规则)Qt 类只要满足以下任意一条,必须加Q_OBJECT:使用signals信号、slots槽函数;使用Q_PROPERTY动态属性;需要运行时类型识别、动态反射。强制规则(高频报错点)Q_OBJECT只能写在头文件的类定义内部,不能写在.cpp里;类必须直接 / 间接继承 QObject(QWidget、QMainWindow、QDialog 都满足);包含Q_OBJECT的头文件,必须被 moc 单独处理。示例标准头文件:cpp运行#ifndef MAINWINDOW_H #define MAINWINDOW_H #include QMainWindow #include "ui_mainwindow.h" // uic 后续生成的 UI 头文件 class MainWindow : public QMainWindow { Q_OBJECT // 触发 moc 代码生成,位置固定在类内部第一行附近 public: explicit MainWindow(QWidget *parent = nullptr); // 信号:仅声明,实现由 moc 自动生成 signals: void dataChanged(int val); // 槽函数:声明+开发者实现 public slots: void onBtnClicked(); private: Ui::MainWindow ui; // 嵌入UI类,关联拖拽的所有控件 }; #endif // MAINWINDOW_H1.3.3.cpp源文件标准 C++ 实现文件,编写业务逻辑、槽函数实现、构造函数。 构造函数中必须调用ui.setupUi(this),加载 uic 生成的界面代码。1.3.4.ui界面文件本质:XML 格式文本文件,Qt Designer 拖拽控件时,实时写入控件坐标、大小、文本、布局、样式、对象名。 开发者不需要手写界面代码,由uic翻译成标准 C++。1.3.5.qrcQt 资源文件XML 格式,作用:将外部图片、QSS、字体、配置文件打包进程序内部,脱离外部文件依赖。 核心特性:Qt 虚拟文件系统:/,代码中通过:/前缀/文件名访问资源。示例:xmlRCC !-- prefix 虚拟路径前缀 -- qresource prefix="/images" filelogo.png/file fileicon.png/file /qresource /RCC代码访问:QPixmap(":/images/logo.png")1.3.6.rcWindows 原生资源文件(可选)MSVC 专属资源脚本,用于设置:程序图标、文件版本、公司名称、产品描述、UAC 权限清单 (manifest)。 编译后生成.res二进制资源,最终嵌入 EXE。1.3.7.pro.user文件Qt Creator 专属本地配置文件,XML 格式,内容包括:当前选中的编译套件、编译模式;断点、书签、运行参数、环境变量;窗口布局、项目视图配置。完全不参与编译、不参与链接,删除后仅重置 IDE 配置,工程不受影响。第二部分 阶段 1:qmake 生成编译规则(从 .pro → Makefile)2.1 执行时机与命令进入构建目录执行(Qt Creator 后台自动执行):bash运行# 进入构建目录 cd build-Demo-MSVC2015-Release # 读取上级目录的 .pro 文件,生成 MSVC 格式 Makefile qmake ../Demo.pro