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

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

系列导航|Qt 5.14.2 + VS2019 实战三篇

① 环境搭建与 Kit 修复指南

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

③ 构建排错实录(本篇,持续追加)
文档定位:三篇中的第三篇,独立成文,不并入手册。 理由是两者生命周期不同:手册是"应该怎么配"的稳定规范,排错实录是"出问题怎么修"的持续增量病例库;合并会让手册因每次踩坑而被动改版,也会把规范条文和流水账混在一起。

文档 管什么 性质
① 环境搭建与 Kit 修复指南 Kit 能不能绿、生成器怎么选、CMake/Qt 怎么装 正向规范:应该怎么配
② 工程创建与 CMake/qmake 构建规范 目录/命名/构建脚本、两套构建系统骨架 正向规范:应该怎么建
③ 本文(排错实录) 具体某次踩坑的复现、根因与修复 反向后验:出问题怎么修

一条硬规则:规律写进手册,案例留在本文。 凡是"换个工程也成立"的结论(如"单配置用 all、VS 多配置用 ALL_BUILD"),已上收到环境手册 4.3 / 6.4;本文只保留当时的复现过程,与手册重复的操作步骤一律给链接,不双份维护。

症状索引

症状 / 错误码 触发场景 条目
MSB 1009:找不到项目文件 all.vcxproj Qt Creator + VS2019 生成器构建 [§1](#症状 / 错误码 触发场景 条目 MSB 1009:找不到项目文件 all.vcxproj Qt Creator + VS2019 生成器构建 §1 不清楚生成器该配什么参数 / Build、Clean 命令怎么写 生成器选型、命令行验证 §2 想把 VS 生成器换成 Ninja 提速 / 避开 VS 生成器坑 §3)
不清楚生成器该配什么参数 / Build、Clean 命令怎么写 生成器选型、命令行验证 [§2](#症状 / 错误码 触发场景 条目 MSB 1009:找不到项目文件 all.vcxproj Qt Creator + VS2019 生成器构建 §1 不清楚生成器该配什么参数 / Build、Clean 命令怎么写 生成器选型、命令行验证 §2 想把 VS 生成器换成 Ninja 提速 / 避开 VS 生成器坑 §3)
想把 VS 生成器换成 Ninja 提速 / 避开 VS 生成器坑 [§3](#症状 / 错误码 触发场景 条目 MSB 1009:找不到项目文件 all.vcxproj Qt Creator + VS2019 生成器构建 §1 不清楚生成器该配什么参数 / Build、Clean 命令怎么写 生成器选型、命令行验证 §2 想把 VS 生成器换成 Ninja 提速 / 避开 VS 生成器坑 §3)

1. MSB 1009 错误(Qt Creator + VS2019 生成器)

1.1 现象

  • 使用 Qt Creator 搭配 Visual Studio 16 2019 生成器构建时,构建步骤中目标为 all,报 MSB 1009 项目文件找不到错误。
  • 将构建指令从 all 修改为 ALL_BUILD 后即可顺利构建成功。
  • 如果使用其他生成器(Ninja / NMake / MinGW Makefiles),目标仍应使用 all。

1.2 根因分析

生成器与构建目标不匹配,代码和 CMakeLists 都没有问题。

  • 构建目录是用 Visual Studio 16 2019 -A x64 生成的,但 Qt Creator 的构建步骤里目标被固定为 all。
  • all 只属于 Makefile / Ninja 系列生成器;VS 生成器里的聚合目标叫 ALL_BUILD。
  • cmake --build . --target all 会把 all 原样转给 MSBuild,MSBuild 把它当成项目文件 all.vcxproj 去找,于是报 MSB 1009。

1.3 验证过程

验证项 结果
CMakeCache.txt 确认生成器为 Visual Studio 16 2019
构建目录内容 存在 QServer.sln、ALL_BUILD.vcxproj、QServer.vcxproj
手动执行 --target all 可稳定复现同样的 MSB 1009
改为 cmake --build . --target ALL_BUILD --config Debug 编译成功,已生成 Debug\QServer.exe;clean 目标也正常

附加发现:原构建目录缺少 ZERO_CHECK.vcxproj(.sln 引用了它),属于上次 CMake 生成不完整;已重跑一次 CMake 生成补齐。这一点与本次 MSB 1009 错误无关。

1.4 修复方法(保留 VS2019 生成器)

路径:Qt Creator → Projects(项目)→ Build & Run(构建和运行)→ 选中该 Kit → Build(构建)→ Build Steps(构建步骤)→ CMake Build

配置界面如下图所示(展开构建步骤的"详情"面板,在 Targets 列表中勾选 ALL_BUILD):

具体设置:

步骤 Targets Additional arguments
Build 步骤 all 改为 ALL_BUILD --config Debug(Release 目录用 --config Release)
Clean 步骤 保持 clean 同样加 --config Debug

补充说明:

  • CMake Configuration 里的 CMAKE_BUILD_TYPE 不需要动------VS 多配置生成器会忽略它。
  • 不需要重新生成,也不需要修改 CMakeLists.txt。
  • 改完后实际执行的命令为:
text 复制代码
cmake.exe --build . --target ALL_BUILD --config Debug
cmake.exe --build . --target clean  --config Debug
  • 注意 :Qt Creator 4.11.1 不会自动附加 --config,所以 Release 构建目录一定要自己加,否则 MSBuild 会按 .sln 默认的 Debug 配置构建。

1.5 建议

Qt Creator 4.11.1 对 VS 生成器的支持不完整(本次日志中的 cmake --build 也没带 --config):

  • 如果主要在 Qt Creator 里开发:删掉当前 build 目录、改用 Ninja 生成器会更稳(目标继续用 all),详见 §3。
  • 如果主要用 VS2019 :直接打开生成的 QServer.sln 构建更顺。

2. 不同生成器对应配置速查

2.1 这些参数在 Qt Creator 里分别配在哪

本节是环境手册 4.5(Qt Creator 里的 CMake 工具与构建步骤配置) 的配图版:字段含义以手册 4.5 为准,这里只补截图。

下列命令行参数不需要手敲,Qt Creator 分两处配置:

① -G 和 -A x64 → CMake Generator 对话框

路径:Projects(项目)→ Build & Run → 选中该 Kit → Configure Steps(配置步骤)→ 点击 CMake 一行右侧的 Change Producers / 直接编辑 → Generator,如下图所示:

对话框字段 对应命令行参数 本例取值
Executable 使用的 cmake 程序 C:\Program Files\CMake\bin\cmake.exe
Generator -G "..." Visual Studio 16 2019
Platform -A x64 x64
Toolset -T host=x64 等工具集 留空即可

② -DCMAKE_BUILD_TYPE=... → Configure Settings 参数表

路径:Projects → Build & Run → 该 Kit → Build 页 → CMake Configuration 面板 ,直接编辑/添加 CMAKE_BUILD_TYPE 这一项(Debug 或 Release)。

注意:VS 多配置生成器下 CMAKE_BUILD_TYPE 会被忽略,实际构建哪个配置由 Build 步骤的 --config Debug/Release 决定(见 §1.4)。

2.2 参数速查表

生成器 类型 适用套件 CMake 配置参数 Build 命令 Clean 命令
Ninja 单配置 MSVC / MinGW(Qt Creator 推荐) -G Ninja -DCMAKE_BUILD_TYPE=Debug cmake --build . --target all cmake --build . --target clean
NMake Makefiles JOM 单配置 MSVC(没有 Ninja 时) -G "NMake Makefiles JOM" -DCMAKE_BUILD_TYPE=Debug 同上 同上
MinGW Makefiles 单配置 MinGW 套件 -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Debug 同上 同上
Visual Studio 16 2019 多配置 MSVC + 需要 .sln / VS2019 -G "Visual Studio 16 2019" -A x64,配置列表看 CMAKE_CONFIGURATION_TYPES cmake --build . --target ALL_BUILD --config Debug cmake --build . --target clean --config Debug

关键区别:

  • 单配置生成器 :用 CMAKE_BUILD_TYPE 决定 Debug/Release,构建时不需要 --config。
  • 多配置生成器(VS 系列) :CMAKE_BUILD_TYPE 无效,靠 --config 在构建时选择配置。

3. 如果以后换成 Ninja

不能只改步骤命令------生成器写在 CMakeCache.txt 里,切换步骤:

  1. 换一个新的 build 目录(或删掉当前目录重新配置);
  2. 在 §2.1 的 CMake Generator 对话框中选择 Ninja 生成器(相当于 -G Ninja);
  3. 把 Build/Clean 步骤的 Targets 改回 all / clean;
  4. 在 CMake Configuration 里用 CMAKE_BUILD_TYPE=Debug 指定配置。

日常在 Qt Creator 里开发,Ninja 比 VS 生成器稳妥。


相关推荐
Paper数据分析-经管学术1 小时前
1985-2026年中国低空经济专利明细数据库
数据库
RuoyiOffice1 小时前
SpringBoot3 + openGauss:RuoYi Office 登录、流程发布与用印填报适配实战
java·数据库·spring boot·opengauss·信创
fly-iot1 小时前
【FDE知识库】(1):AI 编程时代开发语言选型分析,云使用go,企业用java,算法python,底层c
开发语言·人工智能·golang
云边有个稻草人1 小时前
Prometheus Pushgateway教程:离线任务指标上报、Shell与Python示例、远程访问
开发语言·python·prometheus
暴走约伯1 小时前
【VFX工具链源码拆解 01】总体架构:大型项目特效流程的程序化落地
开发语言·经验分享·3d·unity·架构·游戏引擎
画中有画1 小时前
时序数据库在物联网系统中的应用
数据库·物联网·时序数据库
Decay__8 小时前
05_MySQL 常用 SQL 大全 —— 诊断、管理、优化辅助 SQL 与三大系统库速查
运维·数据库·sql·mysql·架构
C^h10 小时前
c++ string
开发语言·c++
raindayinrain10 小时前
c++高性能--原子操作,无锁编程,操作顺序
开发语言·c++·性能优化