从零到一键绿:Qt 5.14.2 + VS2019 开发环境搭建、Kit 套件配置与构建错误修复完全手册

从零到一键绿:Qt 5.14.2 + VS2019 开发环境搭建、Kit 套件配置与构建错误修复完全手册

一份随时可查阅的实战手册:从 VS2019 模块选择、Qt 5.14.2 安装位置、Kit 双家族(MinGW/MSVC)配置、CMake 生成器选型、到常见错误修复与一键重置,一次说清楚;同时内联两个可直接跑的 BAT 包装脚本与环境诊断脚本。

适用场景:Qt Creator 提示 No suitable kits found、Kit 列表出现红色 ⚠️/❌、MinGW 与 MSVC 混配报错、ABI 不刷新、编译器叹号无法消除、调试按钮灰色、CMake no CXX compiler found 等。
系列导航|Qt 5.14.2 + VS2019 实战三篇

① 环境搭建与 Kit 修复 (本篇)

② 工程创建与 CMake/qmake 构建规范

③ 构建排错实录:从 MSB 1009 到生成器选型


目录

  • 一、先懂原理:编译套件是怎么一回事
  • [二、VS2019 安装与模块选择](#二、VS2019 安装与模块选择)
  • [三、Qt 5.14.2 安装与默认位置](#三、Qt 5.14.2 安装与默认位置)
  • [四、CMake 配置、生成器与调试器(CDB)](#四、CMake 配置、生成器与调试器(CDB))
    • 4.1 CMake 安装
    • 4.2 CMake 与生成器(Generator)原理
    • 4.3 主流 Generator 对比与选型
    • 4.4 VS2019 + CMake 推荐组合与命令行验证
    • 4.5 Qt Creator 里的 CMake 工具与构建步骤配置
    • 4.6 Windows SDK 与调试器(CDB)
  • [五、Qt Creator Kit 套件配置详解](#五、Qt Creator Kit 套件配置详解)
    • 5.0 Kit 总览:MinGW 与 MSVC 两大编译器家族对比
    • 5.1--5.4 MSVC 家族:克隆编译器(vcvars 包装 BAT)、cdb、qmake、Kit 组装
    • 5.5 MinGW 家族:免装 VS 的完整 Kit 配置
    • 5.6 MSVC 家族 Kit 绑定关系汇总
  • 六、常见错误与修复速查表
  • [七、Kit 配置彻底乱了:重置与清理](#七、Kit 配置彻底乱了:重置与清理)
  • 八、一键诊断脚本
  • 九、快速检查清单
  • [十、Qt 5.14 vs 5.15 选型与差异](#十、Qt 5.14 vs 5.15 选型与差异)

一、先懂原理:编译套件是怎么一回事

1.1 三大角色:编译器 / Qt 预编译库 / 调试器

很多人配置失败的根源,是把这三个东西混为一谈。它们各司其职:

角色 是什么 从哪来 干什么用
编译器(cl.exe) MSVC 工具链(v141 / v142) VS Installer 的"生成工具"组件 把你的 C++ 代码编译成机器码
Qt 库(.dll/.lib) Qt 框架的预编译二进制 Qt 在线安装器(选择 MSVC2017 64-bit 那个套件) 提供 Qt 框架功能供你的代码调用
调试器(cdb.exe) Windows 控制台调试器 Windows SDK 的 Debugging Tools 组件 断点、单步、变量查看

核心铁律:Qt 库是用哪个编译器编的,你自己的代码就必须用同一个编译器编。

Qt 5.14.2 的 msvc2017_64 套件是用 MSVC v141 编译的,它的 .lib 只兼容 v141/v142 产物;

若 Kit 里绑了 MinGW 编译器,就会出现经典报错:

MinGW ... cannot produce code for ... MSVC2017 ...

1.2 Kit(构建套件)= 四件套的绑定关系

Qt Creator 中的 Kit 本身不做任何编译工作,它只是一个绑定容器:

复制代码
Kit = Qt 版本(Qt 库路径) + 编译器(cl.exe + 初始化环境 BAT) + 调试器(cdb.exe) + CMake/qmake 工具

配置 Kit 的全部学问,就是让这四项互相兼容且真实存在。任何一项缺失或错配,Kit 上就会出现叹号。

1.3 编译器与工具集版本对照表(ABI 匹配)

这是决定 Kit 能否绿的最底层规则:

Qt 套件(安装器里的名字) 编译器 ABI 需要的 MSVC 工具集 实际版本号文件夹 所属 VS
Qt 5.14.2 MSVC2017 32bit win_msvc2017_x86 v141 VC\Tools\MSVC\14.16.xxxxx VS2017 或 VS2019(勾 v141)
Qt 5.14.2 MSVC2017 64bit win_msvc2017_64 v141 VC\Tools\MSVC\14.16.xxxxx VS2019 勾选 v141 即可(推荐)
Qt 5.14.2 MSVC2019 64bit win_msvc2019_64 v142 VC\Tools\MSVC\14.29.xxxxx VS2019 默认自带
Qt 5.15.2 MSVC2019 64bit win_msvc2019_64 v142 VC\Tools\MSVC\14.29.xxxxx VS2019 默认自带
Qt 5.14.2 MinGW 64bit win_mingw73_64 MinGW 7.3.0 Qt 安装器自带 无需 VS

三个要点:

  1. v141/v142 是工具集(cl.exe 每版本一套),互相独立 ;VS2019 默认只装 v142,想用 msvc2017 套件必须在安装时手动勾选 v141 生成工具。
  2. msvc2017 的 Qt 库,v141 和 v142 编译器都能链接(二进制兼容),但反过来 MinGW 谁都不行。
  3. 调试器 cdb.exe 与编译器版本完全解耦------它只跟 Windows SDK 版本走(每个 SDK 各带一份 cdb),跟你是 v141 还是 v142 编译的没有任何关系。

1.4 为什么 Kit 需要"初始化环境 BAT"(vcvars64.bat 的原理)

cl.exe 不能裸跑。它依赖一组环境变量(INCLUDE 头文件路径、LIB 库路径、PATH 工具路径),这些变量由 Windows SDK 和工具集目录计算而来。

vcvars64.bat(或 vcvarsall.bat x64)的作用就是在子 shell 里搭好这套编译环境。Qt Creator 每次调用 cl.exe 前,会先执行 Kit 里配置的 Initialization BAT:

  • Initialization 留空或路径错 → cl.exe 找不到头文件/运行失败 → 编译器叹号
  • cl.exe 路径指向 2019 工具集,但 BAT 指向 2017 工具集 → 环境变量与编译器混搭 → 链接失败 → 叹号

关键规则:编译器路径(cl.exe)和初始化脚本必须属于同一个工具集。

实践中最稳的做法是自写一个包装 BAT,用 vcvarsall.bat amd64 -vcvars_ver=14.16 锁死工具集版本(见 5.1.1,可直接复制源码)。

amd64 与 amd64_x86 的区别(配置 CDB/编译器时常见):

环境脚本 宿主工具 目标产物 对应套件
vcvars64.bat(amd64) 64 位 64 位程序 msvc2017_64 / msvc2019_64
vcvarsall.bat amd64_x86 64 位 32 位程序 msvc2017_32bit

二、VS2019 安装与模块选择

2.1 获取安装器

2.2 工作负载(模块)选择

安装向导第二页"工作负载",选择:

工作负载 是否勾选 说明
✅ 使用 C++ 的桌面开发 必选 Qt MSVC 编译的最小依赖,包含 MSVC v142、Windows 10 SDK、Atl/Mfc 可选组件
❌ Unity / Python / .NET Web / UWP 等 不选 与 Qt 开发无关,白白占几十 GB

"使用 C++ 的桌面开发"右侧的"安装详细信息"面板里,确认勾选 MSVC v141 和/或 v142(见下节)。

2.3 单个组件(针对 Qt 套件的精确勾选)

切到"单个组件"选项卡,搜索并勾选:

必须勾选(编译 Qt 程序的最小集)

组件 用途 对应 Qt 套件
MSVC v142 - VS 2019 C++ x64/x86 生成工具 (v16.11) v142 编译器(cl.exe) Qt msvc2019_64
MSVC v141 - VS 2017 C++ x64/x86 生成工具 (v16.11) v141 编译器(cl.exe) Qt msvc2017_64(Qt 5.14.2 主流套件)
Windows 10 SDK (10.0.19041.0) 系统头文件 + CDB 调试器 所有 MSVC 套件
  • v141 和 v142 按需二选一;只打算用 Qt 5.14.2 msvc2017_64 → 勾 v141;两个套件都要用 → 都勾。
  • VS2019 可选的 Windows 10 SDK 有多个版本,注意:部分版本不带调试工具(详见第四章),推荐 19041 或单独装 SDK。

建议勾选(提升兼容性)

组件 用途
C++ ATL for v141 / v142 部分第三方库依赖(如 protobuf)
C++ MFC for v141 / v142 如需 MFC 互操作
Windows 10 SDK (10.0.22621.0) 更新版本 SDK(可选,与 19041 共存)

Windows 10/11 SDK 版本选择参考

版本 Win10 对应版本 推荐度 备注
10.0.17134.0 1803 ⭐⭐⭐ Qt 5.14.2 时代最匹配,最稳
10.0.19041.0 2004 ⭐⭐⭐ Win10 最后一个长期维护 SDK,自带 CDB
10.0.22621.0 --- ⭐⭐ 较新,兼容性更好(可选)
10.0.17763.0 1809 ⭐⭐ 可用
10.0.16299.0 1709 ⭐ 太旧,可能缺 Qt 需要的头文件

不确定就全选,占空间不大,Qt Creator 会自动挑最合适的。

2.4 安装位置与"默认安装位置"说明

安装向导第三页"安装位置",VS2019 的默认路径如下(不改动即按此安装):

内容 默认位置
Visual Studio IDE 本体 D:\Program Files (x86)\Microsoft Visual Studio\2019\Community\(C 盘则为 C:\Program Files (x86)\...)
MSVC 工具集(cl.exe / vcvars) ...\2019\Community\VC\Tools\MSVC\14.16.29515\(v141) ...\2019\Community\VC\Tools\MSVC\14.29.30133\(v142)
C++ 源码根目录 ...\2019\Community\VC\
Windows SDK 头文件/库 C:\Program Files (x86)\Windows Kits\10\Include\<版本>\ C:\Program Files (x86)\Windows Kits\10\Lib\<版本>\
CDB 调试器 C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\cdb.exe(64 位) C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\cdb.exe(32 位)

⚠️ 三个配置时要用的具体路径:

  • v141 的 cl.exe:...\VC\Tools\MSVC\14.16.29515\bin\Hostx64\x64\cl.exe
  • v141 的环境脚本:...\VC\Tools\MSVC\14.16.29515\bin\Hostx64\x64\vcvars64.bat
  • v142 同理换成 14.29.30133 文件夹。Windows SDK 无论哪个工具集,共用 Windows Kits\10。
    注意:末位数字(29515/30133)随 VS 小版本更新会变化,以本机实际目录为准。

2.5 验证安装

安装完成后重启电脑 ,打开 VS 2019 x64 Native Tools Command Prompt(开始菜单搜索 Developer Command Prompt),运行:

复制代码
cl

第一行输出:

复制代码
Microsoft (C) Optimizing Compiler Version 14.16.27023 → v141 ✓
Microsoft (C) Optimizing Compiler Version 14.29.29333 → v142 ✓

三、Qt 5.14.2 安装与默认位置

3.1 安装 Qt 5.14.2

  1. 打开 Qt Maintenance Tool(或从 Qt 官网下载离线/在线安装器;5.14.2 需用较老版本的在线安装器或开源历史版本包)
  2. 登录 Qt 账号 → 选择"添加组件"
  3. 展开 Qt → 勾选 Qt 5.14.2,其下子项按需勾选:
组件 是否勾选 说明
✅ MSVC 2017 64-bit 必选(配合 VS2019 v141) 这就是"Qt 预编译库",不是编译器!
✅ MinGW 7.3.0 64-bit 建议选 免装 VS 的备选/快速上手套件
✅ Sources 建议选 查看/调试 Qt 源码用
✅ Qt 5.14.2 Additional Libraries 按需 图表、多媒体等扩展模块
✅ Tools → Qt Creator 必选(若未单独装) IDE 本体
✅ Tools → MinGW 7.3.0 64-bit 勾了 MinGW 套件就选 MinGW 编译器工具链

易混点提醒 :Qt 安装器里的"MSVC 2017 64-bit"是用 MSVC2017 编译好的 Qt 库 ;

VS Installer 里的"MSVC v141 生成工具"才是编译器。二者缺一不可,且来源不同。

3.2 Qt 默认安装位置

Qt 默认安装在 C 盘根目录(安装器第一页可改,建议保持短路径):

内容 默认位置
Qt 5.14.2 套件根 C:\Qt\5.14.2\
MSVC2017 64 位套件 C:\Qt\5.14.2\msvc2017_64\(内含 bin\qmake.exe、bin\Qt5Core.dll)
MinGW 64 位套件 C:\Qt\5.14.2\mingw73_64\
Qt Creator C:\Qt\Tools\QtCreator\bin\qtcreator.exe
MinGW 编译器 C:\Qt\Tools\mingw730_64\
组件(Additional Libraries 等) C:\Qt\Components\

判定一个 Qt 套件是否可用于 Kit:目录下存在 bin\qmake.exe。Qt Creator 的"Qt 版本"页就是靠 qmake 识别套件的。


四、CMake 配置、生成器与调试器(CDB)

4.1 CMake 安装

  1. 下载:https://cmake.org/download/(Windows x64 Installer,选 3.27.x 稳定版 ,不要用 -rc 候选版)
  2. 安装时务必勾选 :Add CMake to system PATH for all users
  3. 验证:新打开 CMD 输入 cmake --version,出现版本号即成功

也可不装外部 CMake,使用 Qt 安装器自带的 CMake(Tools 里勾选),但独立安装便于命令行复用。

4.2 CMake 与生成器(Generator)原理

一句话:CMake 自己不编译代码,它是"构建系统的构建系统" 。CMake 读取 CMakeLists.txt,按你选的 Generator 输出不同形态的"中间构建文件",再喊真正的编译器(cl.exe / g++)去干重活。

CMake 的两级流程:

复制代码
CMakeLists.txt
     │  (1) Configure 阶段 → cmake -S . -B build -G "..."
     ▼
中间产物(由 Generator 决定形态)
   ├─ Makefile           ← NMake / MinGW Makefiles
   ├─ build.ninja        ← Ninja
   ├─ *.vcxproj/*.sln    ← Visual Studio NN
   └─ *.ninja            ← Ninja Multi-Config
     │  (2) Build 阶段 → cmake --build build [--config Release]
     ▼
实际编译器工作: cl.exe 或 g++ → 产出 .obj → link → .exe

要点拆解:

  • Generator 决定中间产物长什么样。不同 Generator 对"多配置、并行、增量"能力完全不同,这就是选型的本质。
  • 单配置 vs 多配置 :
    • 单配置(Ninja / Makefiles):一个 build 目录只对应一种配置(Debug 或 Release),需 CMAKE_BUILD_TYPE 指定;切配置要重新新建 build 目录。
    • 多配置(Visual Studio / Ninja Multi-Config):一个 build 目录同时包含 Debug/Release/RelWithDebInfo;build 时用 --config Release 选。
  • CMake Cache(CMakeCache.txt) :Configure 阶段写定参数到 build 目录里,后续默认复用。修改 -D 参数后必须重新跑 Configure,或直接删 build 目录,否则新参数不生效。
  • 编译器发现机制 :CMake 在 Configure 时实际去跑一次 cl.exe/g++,因此必须在它能"看见"编译器的环境下执行------MSVC 系就是先 call vcvars...bat 拉好 INCLUDE/LIB,再跑 cmake。

4.3 主流 Generator 对比与选型

Generator 名 后端编译器 中间产物 多配置 并行 需 vcvars 环境 典型适用
Ninja MSVC 或 MinGW build.ninja ❌ ✅✅ 默认开 ✅ MSVC 需要 Qt Creator 首选,速度最快
Ninja Multi-Config MSVC *.ninja ✅ ✅✅ ✅ MSVC 需要 单目录多配置,兼顾 VS与 Ninja
Visual Studio 16 2019 MSVC(-T v141/v142 选工具集) .sln/.vcxproj ✅ ✅ MSBuild ❌ 自动定位 VS 需要 VS IDE 打开调试、交付
NMake Makefiles JOM MSVC Makefile ❌ ✅ JOM 多线程 ✅ Ninja 不可用时的稳妥备选
NMake Makefiles MSVC Makefile ❌ ❌ 串行 ✅ 传统脚本兼容,不推荐
MinGW Makefiles MinGW g++ Makefile ❌ ✅ -j ❌ MinGW 家族默认选择
MSYS Makefiles MSYS 下的 gcc Makefile ❌ ✅ ❌ 仅 MSYS2 发行版环境使用

一句话选型:开发阶段追求速度 → Ninja;需要开 VS IDE 断点 → Visual Studio 16 2019;MinGW 家族 → MinGW Makefiles(或直接回 qmake,不碰 CMake)。Qt 5.14 本身 qmake 仍是一等公民,小项目不一定要上 CMake。

构建目标(target)名必须与 Generator 匹配------这是 VS 生成器最容易踩的一脚:

Generator 类型 聚合目标 Clean 目标 需要 --config
Ninja / NMake / MinGW Makefiles(单配置) all clean ❌ 由 CMAKE_BUILD_TYPE 决定
Visual Studio 16 2019 / Ninja Multi-Config(多配置) ALL_BUILD clean ✅ 必须显式给
  • cmake --build . --target all 在 VS 生成器下会把 all 原样转给 MSBuild,MSBuild 去找 all.vcxproj → 报 MSB 1009(项目文件不存在)。
  • 一句话记:单配置用 all,VS 多配置用 ALL_BUILD ;clean 两边同名。
  • Qt Creator 里对应 Build Steps → CMake Build → Targets 这一栏;完整复现过程与配图见《Qt 构建排错实录 §1》。

4.4 VS2019 + CMake 推荐组合与命令行验证

针对本文主线(Qt 5.14.2 + VS2019)的推荐基线:

Kit 家族 推荐 Generator 需要的工具 备注
MSVC v141 + Qt 5.14.2 msvc2017_64 Ninja CMake 3.27 + ninja.exe 配合 C:\Qt\Config\vcvars_v141_amd64.bat(见 5.1.1),速度与可控性最佳
MSVC v141 NMake Makefiles JOM CMake + jom.exe Ninja 不可用时的备选
MSVC v141(要开 VS IDE) Visual Studio 16 2019 + -A x64 -T v141 仅 CMake 自动定位 VS,不需 vcvars
MinGW 7.3.0 + Qt 5.14.2 mingw73_64 MinGW Makefiles CMake + mingw32-make.exe 把 C:\Qt\Tools\mingw730_64\bin 加 PATH 即可

推荐工具基线 :VS2019 (v141) + CMake 3.27.x + Ninja,jom 作为兵备。

辅助工具安装位置:

命令行验证(Ninja + v141 环境,主流推荐):

bat 复制代码
:: 1. 先加载 v141 x64 环境(同 5.1.1 那个包装 BAT)
call C:\Qt\Config\vcvars_v141_amd64.bat

:: 2. Configure(单配置 Ninja,一次性指定 build type 和 Qt 位置)
cmake -S . -B build_v141_ninja ^
      -G "Ninja" ^
      -DCMAKE_BUILD_TYPE=Release ^
      -DCMAKE_PREFIX_PATH=C:/Qt/5.14.2/msvc2017_64

:: 3. Build
cmake --build build_v141_ninja

预期输出:-- The CXX compiler identification is MSVC 19.16.xxxxx(这个 19.16 就是 v141)。

命令行验证(Visual Studio generator,不依赖 vcvars):

bat 复制代码
cmake -S . -B build_vs16 ^
      -G "Visual Studio 16 2019" -A x64 -T v141 ^
      -DCMAKE_PREFIX_PATH=C:/Qt/5.14.2/msvc2017_64

cmake --build build_vs16 --config Release

-T v141 就是选择工具集。与 5.1.1 包装 BAT 里 -vcvars_ver=14.16 作用完全一致:强制锁定工具集,不让 VS2019 默认选 v142。

常见坑:

  • Ninja 直接报 no CXX compiler found → 没先 call vcvars_v141_amd64.bat 就跑了 cmake;先加载环境再跑
  • 改了 -D 参数但行为不变 → CMakeCache 缓存了旧值,删 build 目录重跑
  • -A x64 与 -T v141 拼写错(大写不对)→ VS generator 不识别,会默默退回默认 v142
  • Qt5_DIR 指到了 msvc2019_64 链接失败 → 确认 CMAKE_PREFIX_PATH 与 Kit 里编译器 ABI 同家族同位数

4.5 Qt Creator 里的 CMake 工具与构建步骤配置

Qt Creator 不直接暴露 Generator 下拉------它是靠"构建步骤"里传的命令行推断。配置入口三处:

① Tools → Options → Build & Run → CMake 页签

  • 自动检测不到就点 Add ,填 C:\Program Files\CMake\bin\cmake.exe
  • 勾上"默认"(如果同时登记了多个 CMake,选主力的那个)

② Tools → Options → Build & Run → Kits 页

  • 每个 Kit 的 CMake tool 字段选① 里登记的 cmake
  • CMake configuration 文本框可以预置默认参数(一般留空,靠项目 CMakeLists 自己处理)

③ 项目模式 → Build & Run → 对应 Kit 的 Build Settings(真正的 Generator 选择位置)

字段 选什么 实际含义
Generator Ninja / NMake Makefiles JOM / MinGW Makefiles / MSys Makefiles 不同项对应向 cmake 传入不同的 -G "..."
Build directory 默认 build-<Kit>-Debug 单配置 Generator 时,切 Release 建议新建一个 build 目录
Configure arguments -DCMAKE_PREFIX_PATH=C:/Qt/5.14.2/msvc2017_64 -DCMAKE_BUILD_TYPE=Release 等 追加 -D 参数,改动后必须 Run CMake 重跑 Configure
Initial CMake step 默认 cmake configure 实际执行 cmake -S . -B <build dir> -G <上面选的> <参数>
Make program Ninja 时留空(内置);JOM 时指向 jom.exe;MinGW 时指向 mingw32-make.exe 对应 "Build" 步骤里实际呼入的后端工具

关键提示:MSVC 系 Kit 搭配 Ninja 时 ,Qt Creator 会调用 Kit 里编译器登记的 Initialization BAT(即 vcvars_v141_amd64.bat)拉起环境后再执行 cmake,因此不需要手工处理 vcvars;这就是为什么 5.1.1 的包装 BAT 既是编译器初始化入口,也是 CMake Ninja 能跑起来的前提。

切 Generator 的正确姿势 :Build Settings 里改完 Generator 后,先 Details → Wipe Stash或直接删除 build 目录(避免 CMakeCache.txt 新旧冲突),再 Run CMake。

4.6 Windows SDK 与调试器(CDB)

  • CDB = Console Debugger,微软的命令行调试器,无图形界面,但支持断点、单步、变量查看等完整调试功能。Qt Creator 的 Debug 模式对 MSVC 项目就是通过 CDB 实现的。
  • CDB 不在 Qt 里,也不在 MSVC 工具集里 ,它来自 Windows SDK 的 "Debugging Tools for Windows" 组件------这是 cdb.exe、windbg.exe 的唯一来源。

为什么会出现"有编译器、没调试器"(Kit 叹号、Debug 按钮灰色):

  • VS Installer"单个组件"里只勾了 MSVC 生成工具(只有 cl.exe),没勾 Windows SDK;
  • 或勾了 SDK 但**没勾"安装调试工具"**子选项(VS Installer 内某些 SDK 版本默认不装调试工具);
  • 或 VS2019 下拉里选的 Windows 10 SDK 版本本身不带调试器 → Qt Creator 无法自动检测到 cdb。

两种正确安装方式:

方式一:VS Installer 中勾选带调试工具的 Windows 10 SDK(如 10.0.19041.0),安装时如有"是否包含调试工具"选项,保持勾选。

方式二(推荐,最可控):单独下载安装 Windows SDK:

  1. 官方下载地址:https://learn.microsoft.com/zh-cn/windows/apps/windows-sdk/downloads
  2. 运行 winsdksetup.exe,组件列表里必须勾选 :
    • ✅ Debugging Tools for Windows(cdb.exe 的唯一来源)
    • ✅ Windows SDK for Desktop C++ amd64 Apps (64 位桌面头文件/库,勾了会自动连带选择所需项;如需 32 位支持,另勾 x86 Apps)
  3. 安装完成后 cdb.exe 位于:
    • C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\cdb.exe(64 位)
    • C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\cdb.exe(32 位)

调试器与 MSVC 版本解耦:它的版本只跟 Windows SDK 版本走(10.0.19041 / 10.0.26100 各带一份 cdb),与你用 v141 还是 v142 编译无关。全机器共用一份即可。


五、Qt Creator Kit 套件配置详解

配置入口:Tools(工具) → Options(选项) → Build & Run(构建和运行),共四个相关页签:Compilers(编译器) / Debuggers(调试器) / Qt Versions(Qt 版本) / Kits(构建套件)。

配置顺序遵循依赖关系:先编译器 → 再调试器 → 再 Qt 版本 → 最后组装 Kit。

5.0 Kit 总览:Windows 下的两大编译器家族

Qt 5.14.2 在 Windows 上能用的 Kit 只有两个家族:MinGW 家族 和 MSVC 家族。选家族就是在选三条路:装不装 VS、发布兼容性、能不能用某些第三方库。

对比项 MinGW 家族(GCC for Windows) MSVC 家族(微软编译器)
编译器可执行文件 g++.exe / gcc.exe cl.exe
调试器 gdb.exe(GNU gdb) cdb.exe(Windows SDK)
需要额外安装 不需要,Qt 安装器自带工具链 需要 VS Installer 装 v141/v142 生成工具 + SDK
Qt 套件目录名 mingw73_64 / mingw73_32 msvc2017_64 / msvc2017_32bit / msvc2019_64
ABI 标识 win_mingw73_64 / win_mingw73_32 win_msvc2017_64 / win_msvc2019_64 ...
初始化环境 无需 Initialization BAT(自包含) 必须配置 vcvars 环境 BAT(见 5.1)
与系统/其他库兼容 需附带 libgcc/libstdc++ 等运行时 与 Windows 原生生态、MFC/DirectX、商业库兼容性最好
典型适用场景 快速上手、不碰 VS 的学习/小工具 团队协作、商用发布、需与 VS 工程混编

铁律(两个家族共通):Qt 套件、编译器、调试器三者必须同家族、同位数:

复制代码
mingw73_64 套件  →  MinGW 7.3.0 x64 (g++)  →  gdb.exe (x64)      ✔ 成套
msvc2017_64 套件 →  MSVC v141 x64 (cl.exe) →  cdb.exe (x64)      ✔ 成套
mingw73_64 套件  →  MSVC cl.exe / cdb.exe                        ✘ 跨家族 → 叹号
msvc2017_64 套件 →  MinGW g++ / gdb.exe                            ✘ 就是经典报错
             `MinGW ... cannot produce code for ... MSVC2017 ...`

Qt 安装器里两个家族的套件可以都勾(互不冲突),建两个 Kit 并存,项目右键随时切换。下面分别给出两套的完整配置。

5.1 Compilers 页:克隆配置出 MSVC 2017 x64 编译器(重点)

Qt Creator 自动检测经常把 v141/v142 混成一团、或 ABI 识别错误。**最稳的做法是:自己写一个初始化 BAT 锁定工具集版本,然后克隆一份编译器配置改成 MSVC 2017。**这是本节的核心。

5.1.1 关键机制:用 -vcvars_ver 锁定工具集版本的包装 BAT

VS2019 装了 v141 生成工具后,目录里并没有 vcvars64.bat(它在 VC\Auxiliary\Build\ 下只有 vcvarsall.bat);直接指给 Qt Creator 容易版本错乱。解法是建一个只有三行的包装 BAT ,放在 C:\Qt\Config\ 下:

vcvars_v141_amd64.bat(64 位环境,对应 msvc2017_64 套件):

bat 复制代码
@echo off
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" amd64 -vcvars_ver=14.16

vcvars_v141_x86.bat(32 位环境,对应 msvc2017_32bit 套件):

bat 复制代码
@echo off
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x86 -vcvars_ver=14.16

原理拆解:

  • vcvarsall.bat 是 VS 官方环境入口(注意:它在 VC\Auxiliary\Build\ 下,不在 VC\Tools\MSVC\xxx\bin 下);
  • 第一个参数是环境类型:amd64 = 64 位编译环境,x86 = 32 位编译环境;
  • -vcvars_ver=14.16 是关键:强制选择 v141 工具集(14.16.x),而不是 VS2019 默认的 v142(14.29.x),彻底消除"环境变量与编译器版本混搭"的叹号;
  • VS 路径按实际版本改:Enterprise / Community / Professional;用 v142 配 msvc2019 套件时把参数换成 -vcvars_ver=14.29 即可。

验证 BAT 是否生效:新建 CMD 窗口执行

复制代码
call C:\Qt\Config\vcvars_v141_amd64.bat && cl

输出 ... Version 14.16.xxxxx 即 v141 环境就绪。

5.1.2 克隆编译器配置(Add / Clone 均可)

入口:Tools → Options → Build & Run → Compilers。自动检测项不可删,但可以在其基础上得到一份干净的手动配置:

  1. 选中一个已有的 Microsoft Visual C++ Compiler 19.x(或点 Add → Microsoft Visual C++ Compiler);
  2. 点 Clone(克隆),生成一份可自由修改的副本(或者直接 Add Manually 从零填);
  3. 按下表把副本改成 MSVC 2017 x64:
字段 改成什么 填写要点
Name MSVC 2017 x64 (v141) 自己起,一眼能识别
Platform Windows Microsoft Visual C++ Compiler 64bit 与目标套件位数一致
C compiler path ...\VC\Tools\MSVC\14.16.29515\bin\Hostx64\x64\cl.exe C / C++ 两份都要填,指向同一个 cl.exe
C++ compiler path 同上(cl.exe) ---
C initialization C:\Qt\Config\vcvars_v141_amd64.bat ⬅ 指向 5.1.1 的包装 BAT
C++ initialization C:\Qt\Config\vcvars_v141_amd64.bat 两份 Initialization 填同一个 BAT

配 32 位套件(msvc2017_32bit)时另克隆一份,Initialization 换用 vcvars_v141_x86.bat,cl.exe 换 Hostx64\x86(交叉)或 bin\(原生 32)目录。

5.1.3 ABI 不刷新的处理(必踩的坑)

填完 BAT 后如果 ABI 一栏不自动刷新(还是显示旧的 msvc2019 或为空):

  1. 不要死等自动检测------点 ABI 下拉选 自定义(Custom);
  2. 手动选择 MSVC 2017;
  3. 点 APPLY;
  4. 重新进入该项,此时 ABI 会自动选中第一项并刷新为 win_msvc2017_64。

ABI 标错会直接导致 Kit 页面判定"编译器与 Qt 版本不匹配"而报叹号------ABI 显示 win_msvc2017_64 才算配置完成。

5.1.4 旧方案参考:直接指向工具集内 vcvars64.bat

若不用包装 BAT(例如机器上只有 VS2017),也可直接指工具集文件夹里的 vcvars64.bat,此时关键规则不变:

位置 填什么 举例(v141)
① Name 显示名 MSVC v141 x64
② C/C++ compiler path cl.exe 完整路径 ...\VC\Tools\MSVC\14.16.29515\bin\Hostx64\x64\cl.exe
③ Initialization vcvars64.bat 完整路径 ...\VC\Tools\MSVC\14.16.29515\bin\Hostx64\x64\vcvars64.bat

② 和 ③ 必须指向同一个 14.xx 工具集文件夹------这是叹号能否消除的关键;包装 BAT 方案(5.1.1)天然满足这一点,所以更稳。

两个易错点:

  • 编译器路径填了 2019 的 cl.exe,Initialization 却填了 2017 的 BAT → 混搭 → 叹号
  • Initialization 留空 → Qt Creator 无法初始化环境 → cl.exe 运行失败 → 叹号

5.2 Debuggers 页

自动检测一般能发现 cdb.exe;没有就手动 Add:

  • 名称:cdb64
  • 路径:C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\cdb.exe

5.3 Qt Versions 页

  • 若自动列表为空,点 Add ,指向套件的 qmake:C:\Qt\5.14.2\msvc2017_64\bin\qmake.exe
  • 显示名应出现 Qt 5.14.2 MSVC2017 64bit,出现红色即路径错。

5.4 Kits 页:组装套件

新建或修改一个 Kit,字段按下表填:

字段 应选什么 避坑
Name Qt 5.14.2 MSVC2017 64bit(自描述) ---
Compiler MSVC 2017 x64(即 5.1.2 克隆出来的那份) ❌ 不要选 MinGW,也不要选自动检测的混版项
Debugger cdb.exe(Windows 调试器) ❌ 不要选 GNU gdb
Qt version Qt 5.14.2 MSVC2017 64bit 必须与 Compiler 对应
CMake tool System CMake at ...\cmake.exe 必须先装 CMake(qmake 项目可留空)

修改后点 Apply → OK ,回到项目重新 Configure Project / 执行 qmake 。

Kit 页面右上角若全部项无叹号,即为配置成功。

5.5 MinGW 家族 Kit 完整配置(免装 VS 的路线)

MinGW 路线的最大优势:工具链全部由 Qt 安装器自带,不需要 VS,不需要 Windows SDK,不需要Initialization BAT,自动检测基本一次绿。

① 前提:安装时勾对组件

Qt 安装器 → Tools → 勾选 MinGW 7.3.0 64-bit ;Qt → 勾选 MinGW 7.3.0 64-bit 套件(即 mingw73_64)。

默认安装位置:

内容 路径
MinGW 编译器 C:\Qt\Tools\mingw730_64\bin\g++.exe( gcc.exe 同目录)
MinGW 调试器 C:\Qt\Tools\mingw730_64\bin\gdb.exe
Qt MinGW 套件 C:\Qt\5.14.2\mingw73_64\bin\qmake.exe

② Compilers 页 :自动检测应出现 MinGW x64(C/C++ 各一项,指向 Tools 目录的 gcc/g++)。若没检测到,Add → MinGW:

字段 填写
Name MinGW 7.3.0 x64
Platform Microsoft Windows GCC (MinGW, MSYS2, MSVC) 选 64bit 对应项
C compiler path C:\Qt\Tools\mingw730_64\bin\gcc.exe
C++ compiler path C:\Qt\Tools\mingw730_64\bin\g++.exe
ABI 自动刷新为 win_mingw73_64;不刷新同样用 5.1.3 的 自定义 → APPLY 手法
Initialization 留空(MinGW 不需要环境脚本,这也是它比 MSVC 简单的原因)

③ Debuggers 页 :Add → GDB,路径 C:\Qt\Tools\mingw730_64\bin\gdb.exe(自动检测通常能直接发现)。

④ Qt Versions 页 :Add → C:\Qt\5.14.2\mingw73_64\bin\qmake.exe,显示名 Qt 5.14.2 MinGW 64-bit。

⑤ Kits 页组装:

字段 应选什么 避坑
Name Qt 5.14.2 MinGW 64-bit ---
Compiler MinGW x64(C 和 C++ 都是) ❌ 不要选 MSVC
Debugger GNU gdb(mingw730_64 里的 gdb.exe) ❌ 不要选 cdb.exe
Qt version Qt 5.14.2 MinGW 64-bit 必须同家族,选 msvc 套件就是跨家族错配
CMake tool 同 MSVC Kit(qmake 项目可留空) CMake 本体与编译器家族无关,可共用

开箱即用的 Desktop Qt 5.14.2 MinGW 64-bit 默认 Kit 就是这套绑定,一般无需修改直接可用;上面手动配置用于默认 Kit 被删、被改坏或装多版本后环境混乱的情况。

MinGW 路线的取舍 :优点是零 VS 依赖、配置不会出叹号连环坑;代价是与只提供 MSVC 版 .lib 的第三方库(部分商业 SDK、protobuf 预编译包等)不兼容,且发布时需携带 MinGW 运行时 DLL。需要这类库时回到 MSVC 家族(5.1~5.4)。

5.6 MSVC 家族 Kit 组装汇总(cdb + qmake 三件套)

MSVC 路线在 5.1 完成编译器克隆后,剩下的绑定关系汇总成一张表(字段含义见 5.4):

Kit 字段 绑定目标 实际文件位置
Compiler MSVC 2017 x64(5.1.2 克隆项) cl.exe + C:\Qt\Config\vcvars_v141_amd64.bat
Debugger cdb64(5.2 手动项) Windows Kits\10\Debuggers\x64\cdb.exe
Qt version Qt 5.14.2 MSVC2017 64bit(5.3 项) C:\Qt\5.14.2\msvc2017_64\bin\qmake.exe

记法:编译器、调试器、Qt 库三者同家族同位数,编译器额外多一根"Initialization BAT 锁版本"的保险丝。MinGW 路线前两者同目录、天然成套;MSVC 路线三者来源三个地方(VS、SDK、Qt),所以才需要 5.1~5.4 逐项校齐。

5.7 配置原理小结(为什么必须这样配)

复制代码
Kit 绿勾 = 四大要素齐备且 ABI 一致:
  cl.exe(v141 x64) ──链接──> msvc2017_64 的 Qt5.lib  (编译器 ABI 匹配)
  vcvars64.bat     ──设置──> INCLUDE/LIB 指向 Windows Kits\10
  cdb.exe          ──来自──> SDK Debugging Tools(与编译器版本无关)
  qmake/cmake      ──驱动──> 构建系统生成 Makefile/构建图

任何一环缺失,Qt Creator 的自动检测都会以叹号/红叉呈现------叹号不是"玄学",它精确对应"某一项没找到或某两项不匹配"。


六、常见错误与修复速查表

6.1 项目打开阶段

报错信息 可能原因 速查对策
Configure Project 显示 No suitable kits found 没有可用 Kit 检查 Compiler / Qt Version / CMake 是否都配好
MinGW ... cannot produce code for ... MSVC2017 ... 编译器与 Qt 版本不匹配 Kit Compiler 改为 MSVC(不是 MinGW)
CMake executable not found 未安装 CMake 或未加 PATH 安装 CMake 并勾选 Add to PATH
No compiler Kit 缺少编译器 在 Compilers 页手动添加 MSVC

6.2 Kit/编译器叹号排查

叹号现象 原因 解决
编译器图标有叹号,但 Kit 是绿的 自动检测路径与 Initialization BAT 不匹配 按 5.1.2 克隆手动配置(MSVC);MinGW 则检查 gcc/g++ 是否在 Tools 目录
Kit 有叹号,Debug 按钮灰色 没装 Windows SDK 或 CDB VS Installer 勾选 Windows 10 SDK(带调试工具)或单独装 SDK
Kit 有叹号,编译报 cl.exe 未找到 Initialization 留空或路径错 填上环境 BAT(如 C:\Qt\Config\vcvars_v141_amd64.bat)完整路径
Kit 有叹号,编译报 找不到头文件 SDK 没装或路径不对 确认 C:\Program Files (x86)\Windows Kits\10\Include\<版本>\ 存在
Kit 有叹号,链接报 LNK2019 编译器版本与 Qt 套件不匹配 换对应工具集(v141 配 msvc2017,v142 配 msvc2019)
编译通过但无法调试 CDB 缺失 重装 SDK,确保勾选 Debugging Tools for Windows
ABI 下拉不刷新、套件互认失败 ABI 未识别 自定义 ABI 选 MSVC 2017 → APPLY → 重新检测

6.3 手动修复叹号的标准步骤

  1. Tools → Options → Kits → Compilers
  2. 找到 MSVC 编译器,检查:
    • C 与 C++ 的 compiler path 是否指向同一个 cl.exe 目录
    • Initialization 是否指向正确的环境 BAT(推荐用 5.1.1 的 -vcvars_ver=14.16 包装 BAT)
  3. 自动检测项有叹号 → 按 5.1.2 克隆/新增 一份手动配置,ABI 按 5.1.3 刷新为 win_msvc2017_64
  4. 到 Kits 页,把套件的编译器绑定到这份克隆出来的 MSVC 2017 x64
  5. Apply → OK,重新打开项目 Configure Project,重建工程

6.4 构建阶段(目标名 / 生成器)

报错 / 现象 根因 速查对策
MSB 1009:找不到项目文件 all.vcxproj VS 多配置生成器下用了单配置的 all 目标 Build Steps 的 Targets 改 ALL_BUILD,并补 --config Debug/Release(见 4.3,案例见《构建排错实录》§1)
Release 构建出来却是 Debug 产物 VS 多配置下 CMAKE_BUILD_TYPE 被忽略,又没传 --config 构建命令显式加 --config Release
改了 Generator 但构建行为没变 生成器写在 CMakeCache.txt 里,旧缓存仍生效 删 build 目录(或 Wipe Stash)后重跑 Configure,见 4.5
换生成器后报 target 名无效 在 VS / Ninja 之间切换时目标名没跟着换 单配置 all、VS 多配置 ALL_BUILD,见 4.3

七、Kit 配置彻底乱了:重置与清理

7.1 乱源

装过多个 Qt 版本后,Compilers 列表会被 python msvc、各种 MinGW、卸载残留搞得一团乱;而自动检测出来的项,界面里有时删不掉。

7.2 原理:Qt Creator 的配置持久化文件

Qt Creator 把所有自动检测到的 Kit、Qt 版本、编译器信息持久化在本地 XML。删除这些文件后,下次启动会重新扫描系统环境并生成全新的默认配置------这是官方推荐且最彻底的清理方式。

目录 文件 内容
%APPDATA%\QtProject\(Roaming) profiles.xml 构建套件(Kit)配置
toolchains.xml 编译器(工具链)信息
qtversion.xml Qt 版本信息
QtCreator.ini 主配置(UI 布局、插件状态等)
%LOCALAPPDATA%\QtProject\qtcreator\(Local) 整个文件夹 代码模型、索引、会话等缓存

⚠️ 删除这些文件不会 卸载 Qt SDK 或 Visual Studio,也不影响项目源代码;但会重置 Qt Creator 的所有个性化设置(快捷键、主题、窗口布局)。操作前务必备份。

7.3 手动重置步骤

  1. 完全关闭 Qt Creator(否则文件被占用删除失败)
  2. 资源管理器地址栏输入 %APPDATA%\QtProject 回车,删除:
    qtversion.xml、toolchains.xml、profiles.xml、QtCreator.ini
  3. 进入 %LOCALAPPDATA%\QtProject,删除整个 qtcreator 文件夹
  4. 重新启动 Qt Creator,自动重新检测并生成干净的 Kit 列表

7.4 自动化脚本:reset_qt_creator.bat(完整源码)

将以下代码保存为 reset_qt_creator.bat,右键以管理员身份运行即可。

脚本逻辑说明:

  1. 路径检测 :用 %APPDATA% / %LOCALAPPDATA% 环境变量自动定位两个配置目录
  2. 备份机制 :xcopy 完整复制到桌面带日期戳的文件夹(如 QtCreator_Backup_20261029),删错了可拖回恢复
  3. 两种清理模式 :
    • 模式 A(推荐) :仅删 profiles.xml(Kits)、toolchains.xml(编译器)、qtversion.xml(Qt 版本)、cmakekitinformation.xml + Local 缓存------解决"Kit 无效/检测不到编译器",同时保留插件和最近项目
    • 模式 B(彻底):删除整个 QtProject 文件夹------Qt Creator 恢复出厂状态,适合配置彻底损坏
  4. 缓存清理:无论哪种模式都清掉 Local 缓存,防止旧索引干扰重新检测
bat 复制代码
@echo off
chcp 65001 >nul
setlocal enabledelayedexpansion

:: ==========================================
:: Qt Creator 配置清理与备份工具
:: ==========================================

echo [1/4] 正在检测 Qt Creator 配置路径...
set "ROAMING_DIR=%APPDATA%\QtProject"
set "LOCAL_DIR=%LOCALAPPDATA%\QtProject"
set "BACKUP_DIR=%USERPROFILE%\Desktop\QtCreator_Backup_%date:~-4,4%%date:~-10,2%%date:~-7,2%"

if not exist "%ROAMING_DIR%" (
    echo [错误] 未找到 Roaming 配置目录: %ROAMING_DIR%
    pause
    exit /b
)

echo [成功] 检测到配置目录: %ROAMING_DIR%
echo.

:: ==========================================
:: 步骤 2: 备份现有配置
:: ==========================================
echo [2/4] 正在备份配置到桌面...
echo 目标路径: %BACKUP_DIR%
xcopy "%ROAMING_DIR%" "%BACKUP_DIR%\Roaming\" /E /I /H /Y >nul
if exist "%LOCAL_DIR%" xcopy "%LOCAL_DIR%" "%BACKUP_DIR%\Local\" /E /I /H /Y >nul

if exist "%BACKUP_DIR%" (
    echo [成功] 备份完成!如果出问题,请从桌面恢复。
) else (
    echo [警告] 备份似乎失败了,请检查磁盘空间或权限。
    pause
    exit /b
)
echo.

:: ==========================================
:: 步骤 3: 选择清理模式
:: ==========================================
echo [3/4] 请选择清理模式:
echo A. [推荐] 仅重置 Kits/编译器/Qt版本 (保留插件和最近项目)
echo B. [彻底] 完全重置 (删除所有设置,包括插件和布局)
echo C. 退出
echo.
set /p choice="请输入选项 (A/B/C): "

if /i "%choice%"=="C" exit /b

:: ==========================================
:: 步骤 4: 执行删除
:: ==========================================
echo [4/4] 正在执行清理...

if /i "%choice%"=="A" (
    echo -> 正在删除 Kits 和编译器配置...
    if exist "%ROAMING_DIR%\qtcreator\profiles.xml" del /f /q "%ROAMING_DIR%\qtcreator\profiles.xml"
    if exist "%ROAMING_DIR%\qtcreator\toolchains.xml" del /f /q "%ROAMING_DIR%\qtcreator\toolchains.xml"
    if exist "%ROAMING_DIR%\qtcreator\qtversion.xml" del /f /q "%ROAMING_DIR%\qtcreator\qtversion.xml"
    if exist "%ROAMING_DIR%\qtcreator\cmakekitinformation.xml" del /f /q "%ROAMING_DIR%\qtcreator\cmakekitinformation.xml"

    :: 同时也清理 Local 目录下的缓存,防止旧缓存干扰
    if exist "%LOCAL_DIR%\qtcreator" rd /s /q "%LOCAL_DIR%\qtcreator"

    echo [成功] 配置文件已删除。
) else if /i "%choice%"=="B" (
    echo -> 正在执行完全重置...
    if exist "%ROAMING_DIR%" rd /s /q "%ROAMING_DIR%"
    if exist "%LOCAL_DIR%" rd /s /q "%LOCAL_DIR%"
    echo [成功] 所有配置已清空。
) else (
    echo [错误] 无效选项。
    pause
    exit /b
)

echo.
echo ==========================================
echo 操作完成!
echo "请重新启动 Qt Creator,它将自动重新检测环境。"
echo ==========================================
pause

注意事项:

  • 运行前确保 Qt Creator 已完全关闭(否则文件被占用删除失败)
  • 通常不需要管理员权限,配置在受保护目录时建议"以管理员身份运行"
  • 重置后丢了自定义配置?把桌面备份里对应 .xml 拷回原处即可

八、一键诊断脚本

将以下代码保存为 qt-msvc-env-check.bat,双击运行,自动输出诊断报告:

  • 检测所有已安装的 VS 版本和工具集文件夹(14.16 / 14.29)
  • 检查 cl.exe、vcvars64.bat 是否存在
  • 检查 Windows SDK 版本和 CDB 调试器
  • 检查 Qt 安装目录和各套件 qmake.exe
  • 生成报告,方便对照排查或发给他人求助

排查顺序建议:先跑诊断脚本确认底层组件齐不齐 → 缺什么按第二/四章补装 → 再按第五章配置 Kit → 还是乱就第七章重置。

8.1 诊断脚本完整源码(qt-msvc-env-check.bat)

bat 复制代码
@echo off
setlocal EnableDelayedExpansion
title Qt + MSVC 环境诊断报告
chcp 936 >nul

echo ============================================================
echo   Qt + MSVC 环境诊断报告
echo   生成时间: %date% %time%
echo ============================================================
echo.

echo [1] Visual Studio 安装检测
echo ----------------------------------------------------------
if exist "C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe" (
    echo [vswhere] 已安装 VS Installer
    for /f "delims=" %%v in ('"C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe" -latest -property installationPath') do set VSROOT=%%v
    echo 最新 VS 安装路径: !VSROOT!
) else (
    echo [警告] 未找到 vswhere.exe,可能未安装 Visual Studio
)
echo.

echo [2] MSVC 工具集文件夹 (VC\Tools\MSVC\*)
echo ----------------------------------------------------------
rem 注意: if exist 在括号块内展开含 (x86) 的路径会导致判断失效,统一改用 call 子程序逐行判断
set FOUND=0
for %%R in ("C:\Program Files (x86)\Microsoft Visual Studio" "C:\Program Files\Microsoft Visual Studio") do call :SCANVS "%%~sR" "%%~R"
if "%FOUND%"=="0" echo [提示] 未找到任何 VC\Tools\MSVC 文件夹
echo.

echo [3] cl.exe 与 vcvars64.bat 检查 (vcvars64.bat 在 VC\Auxiliary\Build)
echo ----------------------------------------------------------
set VCFOUND=0
for %%R in ("C:\Program Files (x86)\Microsoft Visual Studio" "C:\Program Files\Microsoft Visual Studio") do call :SCANCL "%%~sR" "%%~R"
if "%VCFOUND%"=="0" echo [提示] 未找到任何工具集
echo.

echo [4] Windows SDK 检测
echo ----------------------------------------------------------
set SDKBASE=C:\Program Files (x86)\Windows Kits\10\Include
if exist "%SDKBASE%" (
    for /d %%S in ("%SDKBASE%\*") do (
        set SDKVER=%%~nxS
        echo [SDK] !SDKVER!
    )
) else (
    echo [警告] 未找到 Windows SDK 安装路径
)
echo.

echo [5] CDB 调试器检测 (Debuggers 在 Windows Kits\10 下,与 Include 同级)
echo ----------------------------------------------------------
set KITSBASE=C:\Program Files (x86)\Windows Kits\10
set CDBFOUND=0
if exist "%KITSBASE%\10.0.19041.0\Debuggers\cdb.exe" (
    echo [OK] Windows SDK 10.0.19041.0 自带 CDB 调试器
    set CDBFOUND=1
) else (
    echo [缺失] 未找到 10.0.19041.0 的 CDB
)
rem 检查其他 SDK 版本是否带 CDB(含 x64 子目录)
if exist "%KITSBASE%\Include" (
    for /d %%S in ("%KITSBASE%\10.0.*") do (
        set SDKV=%%~nxS
        if not "!SDKV!"=="10.0.19041.0" (
            if exist "%%~dpnS\Debuggers\cdb.exe" (
                set CDBFOUND=1
                echo [OK] !SDKV! 自带 CDB
            )
            if exist "%%~dpnS\Debuggers\x64\cdb.exe" (
                set CDBFOUND=1
                echo [OK] !SDKV! 自带 CDB (x64)
            )
        )
    )
)
if "%CDBFOUND%"=="0" echo [提示] 各 SDK 均未安装 Debuggers 组件,可在 VS Installer / Windows SDK 配置中勾选 "Debugging Tools for Windows"
echo.

echo [6] Qt 安装检测
echo ----------------------------------------------------------
set QTDIRS="C:\Qt" "D:\Qt" "E:\Qt" "C:\Program Files\Qt"
for %%Q in (%QTDIRS%) do (
    if exist "%%~dpnQ" (
        echo 发现 Qt 根目录: %%~dpnQ
        for /d %%B in ("%%~dpnQ\*") do (
            echo   - %%~nxB
        )
    )
)
echo.

echo [7] Qt 各套件 qmake 检测
echo ----------------------------------------------------------
set QMAKEFOUND=0
for %%Q in (%QTDIRS%) do call :SCANQM "%%~sQ" "%%~Q"
if "%QMAKEFOUND%"=="0" echo [提示] 未检测到任何 qmake.exe
echo.

echo ============================================================
echo   诊断结束
echo   下一步: 把本报告与实际 Qt Creator 的
echo   Tools ^> Options ^> Kits 截图一起发给别人排查
echo ============================================================
pause
goto :EOF

rem ============ 子程序: 扫描 VS 工具集文件夹 ============
:SCANVS
rem 规律: dir /b 返回裸名称,路径用 %~1(短路径根)+裸名手工拼接; 展示用 %~2(长路径根); 含空格展开必须加引号,先存变量再 call echo
for /f "delims=" %%Y in ('dir /b /ad "%~1\20*" 2^>nul') do (
    for /f "delims=" %%E in ('dir /b /ad "%~1\%%~nY\*" 2^>nul') do (
        if exist "%~1\%%~nY\%%~nE\VC\Tools\MSVC" (
            for /f "delims=" %%V in ('dir /b /ad "%~1\%%~nY\%%~nE\VC\Tools\MSVC\*" 2^>nul') do (
                set FOUND=1
                set VERNAME=%%~nxV
                set TAG=[其他]
                echo !VERNAME! | findstr /r "^14\.16\..*$" >nul && set TAG=[v141] 对应 VS2017 工具集
                echo !VERNAME! | findstr /r "^14\.2[0-9]\..*$" >nul && set TAG=[v142] 对应 VS2019 工具集
                set "LINE=!TAG! %%~nY\%%~nE\%%~nxV : %~2\%%~nY\%%~nE\VC\Tools\MSVC\%%~nxV"
                call echo %%LINE%%
            )
        )
    )
)
exit /b

rem ============ 子程序: 扫描 cl.exe 与 vcvars64.bat ============
:SCANCL
for /f "delims=" %%Y in ('dir /b /ad "%~1\20*" 2^>nul') do (
    for /f "delims=" %%E in ('dir /b /ad "%~1\%%~nY\*" 2^>nul') do (
        set VCFOUND=1
        set "VCVARS=%~2\%%~nY\%%~nE\VC\Auxiliary\Build\vcvars64.bat"
        set "VCHECK=%~1\%%~nY\%%~nE\VC\Auxiliary\Build\vcvars64.bat"
        if exist "!VCHECK!" (
            set "LINE=[OK] %%~nE vcvars64.bat: !VCVARS!"
            call echo %%LINE%%
        ) else (
            echo [缺失] %%~nE 缺少 vcvars64.bat ^(VC\Auxiliary\Build^)
        )
        for /f "delims=" %%V in ('dir /b /ad "%~1\%%~nY\%%~nE\VC\Tools\MSVC\*" 2^>nul') do (
            set "CLCHECK=%~1\%%~nY\%%~nE\VC\Tools\MSVC\%%~nxV\bin\Hostx64\x64\cl.exe"
            if exist "!CLCHECK!" (
                set "LINE=[OK] %%~nxV cl.exe 存在: %~2\%%~nY\%%~nE\VC\Tools\MSVC\%%~nxV\bin\Hostx64\x64\cl.exe"
                call echo %%LINE%%
            ) else (
                echo [缺失] %%~nxV 缺少 cl.exe ^(Hostx64\x64^)
            )
        )
    )
)
exit /b

rem ============ 子程序: 扫描 Qt 套件 qmake.exe ============
:SCANQM
rem 结构 1: Qt\5.1x.x\msvc2015_64\bin\qmake.exe (dir /b 返回裸名,用 %~1\裸名 拼接)
for /f "delims=" %%V in ('dir /b /ad "%~1\5.1*" 2^>nul') do (
    for /f "delims=" %%K in ('dir /b /ad "%~1\%%~nxV\*" 2^>nul') do (
        if exist "%~1\%%~nxV\%%~nxK\bin\qmake.exe" (
            set QMAKEFOUND=1
            set "LINE=[OK] %%~nxV\%%~nxK : %~2\%%~nxV\%%~nxK\bin\qmake.exe"
            call echo %%LINE%%
        )
    )
)
rem 结构 2: Qt\Qt5.14.2\5.14.2\msvc2015_64\bin\qmake.exe (多一层安装目录)
for /f "delims=" %%V in ('dir /b /ad "%~1\Qt5.1*" 2^>nul') do (
    for /f "delims=" %%W in ('dir /b /ad "%~1\%%~nxV\5.1*" 2^>nul') do (
        for /f "delims=" %%K in ('dir /b /ad "%~1\%%~nxV\%%~nxW\*" 2^>nul') do (
            if exist "%~1\%%~nxV\%%~nxW\%%~nxK\bin\qmake.exe" (
                set QMAKEFOUND=1
                set "LINE=[OK] %%~nxV\%%~nxW\%%~nxK : %~2\%%~nxV\%%~nxW\%%~nxK\bin\qmake.exe"
                call echo %%LINE%%
            )
        )
    )
)
exit /b

脚本中的两条批处理避坑注释(原作者实战踩坑)值得留意:

  1. if exist 在括号块内展开含 (x86) 的路径会导致判断失效,需改用 call 子程序逐行判断;
  2. dir /b 返回裸名称,路径要用短路径根(%~s1)+ 裸名手工拼接,含空格展开必须加引号后再 call echo。

九、快速检查清单(✅ 全部打勾才能构建)

先选家族(见 5.0):走 MinGW 路线只核对 M 组;走 MSVC 路线核对下方「MSVC 路线专有项」全部条目。

M. MinGW 路线(两家族共用的基础项 + MinGW 专有)

  • Qt 5.14.2 已勾选 MinGW 7.3.0 64-bit 套件与 Tools 组件
  • C:\Qt\Tools\mingw730_64\bin\g++.exe、gdb.exe 实际存在
  • C:\Qt\5.14.2\mingw73_64\bin\qmake.exe 存在
  • Kit:Compiler = MinGW x64、Debugger = GNU gdb、Qt version = MinGW 64-bit(三者同家族,Initialization 留空)

MSVC 路线专有项

  • VS Installer 已勾选 MSVC v141 - VS 2017 C++ 生成工具(用 msvc2017_64 套件时)或 v142
  • Windows 10 SDK 已安装且带 Debugging Tools (推荐 10.0.19041.0,或单独装 SDK 勾选调试工具)
  • C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\cdb.exe 实际存在
  • CMake 已安装(3.27.x 稳定版)并加入系统 PATH,cmake --version 可输出
  • CMake Generator 已按 4.4 选定(推荐 Ninja + vcvars 包装 BAT );ninja.exe / jom.exe 已放到 C:\Qt\Tools\... 且可用
  • Qt 5.14.2 已勾选 MSVC 2017 64-bit 组件,C:\Qt\5.14.2\msvc2017_64\bin\qmake.exe 存在
  • C:\Qt\Config\vcvars_v141_amd64.bat 已创建,CMD 验证 call ... && cl 输出 14.16 版本(见 5.1.1)
  • Qt Creator Compilers 页:已按 5.1.2 克隆 出 MSVC 2017 x64,C/C++ 两份 compiler path 指向同一 cl.exe,两份 Initialization 指向 C:\Qt\Config\vcvars_v141_amd64.bat(-vcvars_ver=14.16 包装 BAT),ABI 显示 win_msvc2017_64
  • Qt Creator Kits 页:目标 Kit 的 Compiler 是 MSVC(非 MinGW)、Debugger 是 cdb.exe(非 GDB)、Qt version 是 5.14.2 MSVC2017 64bit
  • 修改后点击 Apply → OK ,重新 Configure Project,Kit 无叹号

两条路线都适用:两个 Kit 并存时各自按上表分组核对;项目左下角选对应 Kit 即可。


十、Qt 5.14 vs Qt 5.15 选型与差异

10.1 配置差异对照

项目 Qt 5.14 Qt 5.15
官方推荐构建 qmake 为主 CMake 被官方扶正
MSVC 套件命名 msvc2017_64 / msvc2019_64 msvc2017_64 / msvc2019_64
编译器要求 v141 (VS2017) / v142 (VS2019) 同上
CMake 目标写法 只能用 Qt5::Widgets(带版本号) 可用 Qt::Widgets(无版本号,与 Qt6 兼容)
CMake 无版本目标 不支持 5.15 引入
AUTOMOC 改进 基础版 改进版(配合 CMake 3.17)
开源版本终点 5.14.2 是该分支最后补丁版 5.15.2 是 Qt5 最后开源版

总结:

  • Qt 5.14.2 msvc2017_64 套件 → v141 编译器 → 14.16.xxx 文件夹
  • Qt 5.15.2 msvc2019_64 套件 → v142 编译器 → 14.29.xxx 文件夹
  • 两者共用同一个 Windows SDK(19041)即可;核心差异在 CMake 写法,不影响 qmake 项目

10.2 版本选型决策树

复制代码
你的项目情况?
├─ 必须留在 Qt 5(老项目/合规要求)
│  ├─ 需要长期维护? → 5.15.2 LTS(Qt5 最后开源版)
│  └─ 只是短期用?   → 5.14.2(教程多、生态成熟)
├─ 可以升级 Qt 6
│  └─ 直接上 Qt 6.2+ + CMake(别在 Qt 5 里折腾了)
└─ 嵌入式/静态交叉编译
   └─ 确认 Qt 是否带 CMake config,否则用 qmake

附录:文档使用说明

本指南为完全自包含文档:

  • 第五章 Kit 配置、第六/七章排错与重置流程覆盖了 Qt + MSVC 环境从零搭建到故障修复的全链路;
  • 第七章内联了清理重置脚本 reset_qt_creator.bat 的完整源码;
  • 第八章内联了环境诊断脚本 qt-msvc-env-check.bat 的完整源码;
  • 需要使用时直接将对应代码块保存为 .bat 文件运行即可,无需依赖任何外部附件。

延伸阅读

三篇文档分工固定,规律写进手册,踩坑案例留在实录:

文档 管什么 性质
本文(① 环境侧) Kit 能不能绿:VS/Qt 安装、Kit 双家族、CMake 生成器、常见错误与重置 正向规范:应该怎么配
② 《Qt 工程创建与 CMake/qmake 构建规范》 工程长什么样:两套构建系统选型、.pro/.pri 与 CMakeLists.txt 骨架、目录结构与命名、第三方库与 windeployqt 打包 正向规范:应该怎么建
③ 《Qt 构建排错实录》 具体某次踩坑的现象、复现与修复(如 MSB 1009、生成器换型、切 Ninja) 反向后验:出问题怎么修

工程手册内容包含:qmake 与 CMake 选型对齐、.pro/.pri 与 CMakeLists.txt 骨架、目录结构与命名规范、第三方库接入与 windeployqt 打包脚本。

相关推荐
Wang's Blog1 小时前
Java 项目实战:交友项目 - 联系人列表
java·开发语言·交友
我命由我123451 小时前
访客系统形式(有用户概念、无用户概念)
java·开发语言·前端·javascript·python·产品运营·产品经理
架构师伯子明1 小时前
FFmpeg C++学习(一):编译和demo
开发语言·c++·学习
海域云SeaArea_1 小时前
Windows Server 2008 R2 从零安装 IIS7.5(二):php.ini 配置
开发语言·windows·php
叼烟扛炮1 小时前
[LangChain] 学习笔记(02):LCEL 链式调用与动态模型配置实战
服务器·开发语言·网络·笔记·学习·langchain
xixingzhe21 小时前
图表中同比与环比的区别:看趋势还是看变化?
开发语言·python
andyweike2 小时前
Swift
开发语言·ios·swift
纪念 2292 小时前
C++算法(六)
开发语言·c++·算法
ShineWinsu2 小时前
对于Qt:QCheckBox常见属性的详细解析
c++·qt·面试·笔试·gui·qcheckbox·多选框