VS + Qt 构建运行闭环
优先调用本技能目录下的脚本,不要在对话里临时重写整套流程。
快速入口
- 默认读取
config.local.json。 - 项目实例优先从
config.local.example.json复制出config.local.json,只覆盖项目差异。 - 多项目并行时,优先使用
config.<profile>.local.json,并通过-Profile <name>选择。 - 用
tools/Resolve-BuildTarget.ps1识别.sln/.pro。 - 默认调用
tools/Invoke-VsQtBuildLoop.ps1执行完整闭环。 - 若同时存在
.sln和.vcxproj,不要直接单编.vcxproj;优先走.sln,否则依赖$(SolutionDir)的头文件、库路径和项目引用可能失效,导致把环境问题误判成“第三方库缺失”或“工具集错误”。 - 项目采用Release+x64配置,不要去管Debug配置。
- 优先采用增量编译。
- 地面端编译验证时禁止运行
lupdate和lrelease;.ts/.qm翻译文件由用户维护,除非用户明确要求单独处理翻译产物。 - 用户要求快速或并行构建时,必须确认实际 MSBuild 命令包含
/m。如果闭环脚本当前配置没有传/m,先用脚本完成标准验证,再按项目推荐命令补跑一次/m并行 MSBuild,或修正本地闭环配置后重跑。
主流程
1. UI 问题
当用户描述的是 UI 逻辑 bug:
- 先用
tools/Add-DiagnosticLogs.ps1生成候选文件和日志建议。 - 把日志加到实际代码位置,再进入完整闭环。
- 如果连续 2 轮仍不明确,必须加日志,不靠猜。
UI 诊断与复现细节见:
references/ui-diagnostics.md
2. 构建前准备
tools/Initialize-BuildEnvironment.ps1tools/Update-QtTranslations.ps1仅在用户明确要求处理翻译文件时调用;普通地面端编译验证不要调用。
要求:
- 激活
vcvarsall.bat - 注入 Qt 工具链
- 地面端编译验证时禁止运行
lupdate,不自动更新.ts。 - 地面端编译验证时禁止运行
lrelease,不生成或覆盖.qm。 - 不自动填写、修正、回退或覆盖
.ts/.qm中已有翻译内容;翻译内容由用户维护。 - 不自动同步
.qm到源码目录或 exe 目录,除非用户明确要求生成运行时翻译产物。 - 校验工程配置文件未被改写
GroundNode 翻译约定
GroundNode/Ruiyan_UAV当前翻译文件使用zh.ts、en.ts、ar.ts。- 不再生成或引用旧文件名
RuiyanUAV_CN.ts、RuiyanUAV_EN.ts、RuiyanUAV_RU.ts。 - 若为 GroundNode 临时生成闭环配置,
translations.enabled必须默认为false;只有用户明确要求处理翻译文件时,才允许启用翻译步骤。 - 不自动生成或覆盖
.ts/.qm,除非用户明确要求生成或更新运行时语言包。
3. 构建与修复
.sln优先走MSBuild- 只有
.pro时走qmake + jom - 存在
.sln时,不要退化成直接编单个.vcxproj;很多 VS + Qt 工程把IncludePath、LibraryPath、依赖项目和QtMsBuild绑定在解决方案上下文里 - 优先执行增量编译,只有工程配置、生成规则、关键依赖或中间产物状态变化导致增量结果不可信时,才切换到全量编译
- 需要手动补跑 MSBuild 时,优先使用 VS 安装目录下的
Bin\amd64\MSBuild.exe并显式加/m;不要因为 PowerShell 引号错误把Program Files (x86)里的x86解析成命令。可靠写法示例:
& cmd.exe /c 'call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" amd64 && "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\amd64\MSBuild.exe" GroundNode\PoseidonCore.sln /p:Configuration=Release /p:Platform=x64 /m /v:minimal'
- 编译失败时调用
tools/Analyze-BuildError.ps1 - 仅执行低风险自动修复
- 最多 3 轮,失败后交给用户
4. 运行与日志
构建成功后继续执行:
tools/Start-ProgramWithLogs.ps1tools/Invoke-ReproScenario.ps1tools/Analyze-RuntimeLog.ps1
如果 repro.mode=ui-automation,自动调用:
tools/Invoke-UiAutomationScenario.ps1
运行期细节见:
references/runtime-loop.md
5. 追溯与报告
在 .sln 同级生成 _codex_trace/<timestamp-attempt>/,至少保留:
change-summary.mdcontext.jsonbefore/after/logs/
闭环结束后输出:
build-report.mdbuild-report.jsonqm-manifest.jsonruntime.logruntime-analysis.jsonrepro-summary.json
约束
- 不要超过 3 次自动修复重试。
- 不要自动安装 VS、Qt、SDK 或修改系统级注册表。
- 不要在依赖不确定时胡乱增删库。
- 对 Qt GUI 程序,即使日志为空,也要记录运行结果。