Qt 6 CMake 项目配置与命令行构建实战指南:从定位 qt-cmake 到 Ninja 增量构建(QGroundControl 实践)
无人机智能硬件【免费下载链接】qgroundcontrolCross-platform ground control station for drones (Android, iOS, Mac OS, Linux, Windows)项目地址https://gitcode.com/gh_mirrors/qg/qgroundcontrol点击查看免费下载本篇技术指南围绕 tools/skills/qt-cmake-project/references/configure.md 展开系统讲解 Qt 6 CMake 项目的试运行流程先定位 cmake、ninja 与 Qt SDK 中的qt-cmake工具再以 out-of-tree 方式完成首次配置最后用ninja进行日常增量构建。文章同时结合本仓库QGroundControl基于 Qt 6 的跨平台地面站的 CMakePresets.json、tools/configure.py 与平台预设给出真实可复现的命令与排错要点。读完你将掌握一套不依赖 IDE、可在任意 CI 与终端环境中复用的 Qt 项目配置/构建工作流。一、适用场景本文解决什么问题configure.md是 qt-cmake-project 技能集中关于配置与构建的参考文档覆盖三个目标定位框架与工具要求cmake、ninja-build、Qt SDK首次配置项目out-of-tree 构建生成 Ninja 构建文件从命令行增量构建ninja。它服务于尝试运行一个 Qt 6 CMake 项目这一核心诉求不涉及 QML 模块编写、资源管理或子项目组织那些属于 simple-project.md、modular-architecture.md、qml-integration.md 与 resources.md 的主题可在需要时按 SKILL.md 的决策树取用。二、定位构建工具cmake、ninja 与 Qt SDK2.1 检查命令行工具文档要求首先确认cmake与ninja来自 ninja-build 包可以从命令行直接调用cmake --version ninja --version这两者是一切后续操作的基础cmake负责生成构建系统ninja负责实际编译与链接。QGroundControl 的根 CMakeLists.txt 声明cmake_minimum_required(VERSION 3.25)CMakePresets.json 的cmakeMinimumRequired同样为 3.25.0——如果你的 CMake 版本低于此值配置阶段会直接报错。Ninja 则是 QGC 全部预设统一采用的生成器见下文第四部分因此ninja也必须可用。2.2 定位 Qt SDK 与 qt-cmake文档给出的定位策略是先确定主机操作系统再按该 OS 的典型安装位置搜索 Qt 框架。关键点有二开发环境中的 Qt 可能装在用户目录而非系统目录搜索时两者都要覆盖目标是找到包含工具链命令的 Qt 安装目录即bin子目录下的qt-cmakeWindows 上为qt-cmake.bat。找到bin/qt-cmake后所有配置活动都应使用qt-cmake而不是裸cmake。原因是 Qt SDK 的qt-cmake包装脚本会自动注入 Qt 相关的工具链信息主机路径、编译器前缀等让配置阶段就能识别出正确的 Qt 安装。本仓库的 tools/configure.py 中find_qt_cmake()函数完整实现了这一搜索策略其优先级为显式参数--qt-root dir指定的 Qt 安装目录环境变量QT_ROOT_DIR常见安装路径按版本号降序优先最新版本Linux~/Qt/*/gcc_64/bin/qt-cmake、/opt/Qt/*/gcc_64/bin/qt-cmake、/usr/lib/qt6/bin/qt-cmakeARM64 主机则匹配gcc_arm64kitmacOS~/Qt/*/macos/bin/qt-cmake、~/Qt/*/clang_64/bin/qt-cmake、/Applications/Qt/*/...WindowsC:/Qt/*/msvc*_64/bin/qt-cmake.batARM64 主机匹配msvc*_arm64Windows 上优先.bat变体因为qt-cmake本身可能是 bash 脚本。2.3 找不到 qt-cmake 怎么办文档明确要求找不到或不确定时询问用户不要臆测路径。这也与本仓库的实际行为一致——configure.py在找不到qt-cmake时会报错Error: qt-cmake not found并提示可改用--no-qt-cmake回退到裸cmake仅适用于自定义工具链场景。三、首次配置out-of-tree 构建3.1 为什么坚持 out-of-tree文档强调倾向于 out-of-tree 构建即构建目录与源码目录分离、位于项目目录之外。这样做的直接收益是源码树保持干净.gitignore无需为构建产物打补丁删除整个构建目录即可无损回到未配置状态不影响任何源文件。对于示例项目MyApp在 Unix 系平台上的首次配置是mkdir MyApp-build cd MyApp-build qt-cmake -S ../MyApp -B . -G Ninja ninja拆解这条命令参数含义-S ../MyApp指定源码目录source dir-B .指定构建目录binary dir此处为当前新建的MyApp-build-G Ninja指定生成器为 Ninja配置完成后目录内会生成CMakeCache.txt、build.ninja等构建文件之后ninja直接读取并执行构建。相比 MakefilesNinja 的增量构建更快、并行调度更好是 Qt 官方模板与 QGC 的默认选择。3.2 在 QGroundControl 中的实际配置命令把上述流程映射到本仓库官方构建文档 docs/en/qgc-dev-guide/getting_started/index.md 给出的命令行配置是~/Qt/6.11.1/gcc_64/bin/qt-cmake -B build -G Ninja -DCMAKE_BUILD_TYPEDebug注意三点差异当前仓库要求Qt 6.11.1仅此版本文档中有明确警告不要使用其他版本qt-cmake的路径需替换为你实际的 Qt 安装位置与 kit-B build把构建目录放在源码树内的build/QGC 预设体系的默认binaryDir是${sourceDir}/build见 common.json额外传入-DCMAKE_BUILD_TYPEDebug显式指定构建类型——QGC 根CMakeLists.txt在未指定时会默认Release见 CMakeLists.txt。Windows 上应使用对应 kit 的批处理入口并从 VS 2022 的x64 Native Tools Command Prompt中执行C:\Qt\6.11.1\msvc2022_64\bin\qt-cmake.bat -B build -G Ninja -DCMAKE_BUILD_TYPEDebug四、命令行构建ninja 增量编译首次配置完成后日常构建只需要两条命令之一cd MyApp-build ninjaninja只重建自上次构建以来发生变化的部分并支持-jN控制并行任务数QGC 的 justfile 中build任务即通过--parallel透传该能力。如果不想切换到构建目录也可以用cmake --build通用形式它根据CMakeCache.txt里记录的生成器自动调用底层构建工具cmake --build build --config Debug这里--config只对 Visual Studio、Xcode 这类多配置生成器有意义Ninja 是单配置生成器构建类型由配置阶段的CMAKE_BUILD_TYPE决定。QGC 构建文档中的完整三步是# 1) 配置 ~/Qt/6.11.1/gcc_64/bin/qt-cmake -B build -G Ninja -DCMAKE_BUILD_TYPEDebug # 2) 构建 cmake --build build --config Debug # 3) 运行 ./build/Debug/QGroundControlWindows 上运行build\Debug\QGroundControl.exe。五、进阶预设体系与构建缓存仓库实践5.1 CMake 预设把定位要求固化为机器配置configure.md的定位步骤本质上是人类对Qt 装在哪的手动探测而 CMakePresets.jsonversion 6把这一知识固化成了可复用的机器配置这正是 QGC 大规模采用的做法通用预设cmake/presets/common.jsondefaultDebug、default-release、default-relwithdebinfo、default-minsizerel均使用 Ninja 生成器、binaryDir为${sourceDir}/build并通过继承debug/release等隐藏预设控制QGC_BUILD_TESTING、QGC_DEBUG_QML等缓存变量平台预设cmake/presets/Linux.json、cmake/presets/Windows.json通过toolchainFile: $penv{QT_ROOT_DIR}/lib/cmake/Qt6/qt.toolchain.cmake直接引用 Qt SDK 提供的工具链文件——这正是定位 Qt SDK的 CMake 原生形态以QT_ROOT_DIR环境变量指向 Qt 安装目录CMake 会从$penv{}宏读取它。该机制与qt-cmake包装脚本的目的相同让配置阶段知道去哪里找 Qt 工具链。列出全部预设、查看每个可见预设对应的 workflowcmake --list-presetsall cmake --workflow --preset Linux-debugcmake --workflow可把 configure → build→ test/package串成一步与configure.md中配置 ninja的两步等价但更聚合。5.2 构建缓存ccache 与 moccacheQGC 在配置阶段自动启用两级缓存均可视为对重复配置/构建开销的工程化优化ccache缓存编译器输出.ccache/检测到ccache在 PATH 中即启用moccachetools/moccache.py以内容寻址方式缓存 Qt moc 输出通过配置期生成的启动脚本接入AUTOMOC_EXECUTABLE缓存目录默认.cache/moccache/可用QGC_USE_MOCCACHE开关控制。这与configure.md强调的优先 out-of-tree、构建产物可随时丢弃相辅相成——缓存存放在源码树内因此删除build/目录不会丢失已缓存的编译产物重建时能跳过整个 moc 阶段。六、常见问题与排错现象原因与处理qt-cmake: command not foundQt SDK 未安装或不在搜索路径中。按 2.2 节顺序检查显式参数、QT_ROOT_DIR、常见安装路径或直接询问用户 Qt 装在哪里CMake Error ... cmake_minimum_required VERSION 3.25CMake 版本过低需升级到 3.25QGC 根 CMakeLists.txt 的要求配置阶段找不到 Qt 组件确认使用的确实是qt-cmake而非裸cmake裸cmake不会自动携带 Qt 工具链信息Windows 下执行失败使用qt-cmake.bat并从 VS 2022 Native Tools 环境启动终端确保 MSVC 工具链可见ninja单配置 vs 多配置混淆Ninja 的构建类型在配置时由-DCMAKE_BUILD_TYPE决定--config仅适用于 VS/Xcode 等多配置生成器提示GLIBCXX_3.4.20 not foundLinux 上 gcc/libstdc 过旧更新编译器或安装新版libstdc6QGC 构建文档的已知问题七、小结回顾configure.md的核心工作流可以总结为一条主线定位工具cmake ninja Qt SDK 的 qt-cmake→ out-of-tree 首次配置qt-cmake -S src -B build -G Ninja→ ninja 增量构建。本文又在本仓库中找到了这条主线的规模化实现tools/configure.py的find_qt_cmake()实现了跨平台 Qt 定位逻辑CMakePresets.json及其平台预设把 Qt 工具链路径固化为QT_ROOT_DIRqt.toolchain.cmake而justfile与 ccache/moccache 则覆盖了从试运行到日常迭代的完整闭环。这套流程不依赖任何特定 IDE可原样迁移到本地终端、CI 流水线与容器构建场景。赞分享无人机智能硬件【免费下载链接】qgroundcontrolCross-platform ground control station for drones (Android, iOS, Mac OS, Linux, Windows)项目地址https://gitcode.com/gh_mirrors/qg/qgroundcontrol点击查看免费下载相关推荐QGroundControl 源码获取与构建实战指南Qt 6.11.1、CMake、容器与构建缓存全解析QGroundControl 源码获取与构建实战指南Qt 6.11.1、CMake、容器与构建缓存全解析 本指南以 QGroundControlQGC开发无人机智能硬件CMake build_command 命令实战指南生成可移植的 cmake --build 构建命令行CMake build_command 命令实战指南生成可移植的 cmake build 构建命令行 导读 build_command 是 CMake 提供的构建工具开发工具CLIQtNodes 安装与构建全指南从源码编译到项目集成Qt 5/6 双版本与 CMake 配置详解QtNodes 安装与构建全指南从源码编译到项目集成Qt 5/6 双版本与 CMake 配置详解 本指南面向希望将 QtNodes Qt 节点编辑器 /UI组件数据可视化上一篇VMware Unlocker终极指南在Windows/Linux上运行macOS虚拟机下一篇终极指南5分钟让你的Windows任务栏透明化 - TranslucentTB完整教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

LLM-WIKI 测试 demo1

LLM-WIKI 测试 demo1

请在 D:\workspace\llm-wiki 初始化/补齐一个基于 Karpathy LLM Wiki 思路的个人知识库系统。 当前目录可能已有文件,请只创建缺失项;已有文件先读取、对比并汇报差异,未经我确认,不要覆盖、移动、删除或重命名。 重要约束&#x…

2026/10/15 2:55:30 阅读更多 →
巧用 Nginx Map 指令:通过请求头动态代理到不同后端服务

巧用 Nginx Map 指令:通过请求头动态代理到不同后端服务

巧用 Nginx Map 指令:通过请求头动态代理到不同后端服务 1. 引言 在现代微服务架构或灰度发布场景中,我们常常需要根据请求的某些特征(如用户身份、设备类型、版本号等)将流量动态路由到不同的后端服务。Nginx 作为高性能的反向代…

2026/10/15 2:55:30 阅读更多 →
员工生日关怀方案落地指南:从图书定制到聚会执行的全流程避坑

员工生日关怀方案落地指南:从图书定制到聚会执行的全流程避坑

简介:员工生日关怀方案.doc是一份面向企业人力资源从业者、行政管理者及团队文化建设负责人的实操型文档,围绕如何用生日关怀提升员工归属感与组织凝聚力展开。方案从策划目的与目标切入,系统梳理了生日图书赠送、定制书签、经理亲笔寄语、分…

2026/10/15 2:55:30 阅读更多 →

最新新闻

Natron ErodeSmooth 节点完全指南:归一化功率加权腐蚀/膨胀滤镜的参数解析与源码级解读

Natron ErodeSmooth 节点完全指南:归一化功率加权腐蚀/膨胀滤镜的参数解析与源码级解读

音视频视频处理图形学桌面应用 【免费下载链接】Natron Open-source video compositing software. Node-graph based. Similar in functionalities to Adobe After Effects and Nuke by The Foundry. 项目地址: https://gitcode.com/gh_mirrors/na/Natron 点击查看 …

2026/10/15 3:32:41 阅读更多 →
GreaterWMS 移动端构建实战:基于 Quasar CLI 与 Cordova 的 Android 打包安装全流程

GreaterWMS 移动端构建实战:基于 Quasar CLI 与 Cordova 的 Android 打包安装全流程

后端前端企业应用 【免费下载链接】GreaterWMS This Inventory management system is the currently Ford Asia Pacific after-sales logistics warehousing supply chain process . After I leave Ford , I start this project . You can share your vacant warehouse space, …

2026/10/15 3:32:41 阅读更多 →
从Apollo-11代号项目到可复现工程:逆向拆解与改造指南

从Apollo-11代号项目到可复现工程:逆向拆解与改造指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 3:32:41 阅读更多 →
rospack depends1 报错排查:ROS依赖查询与环境变量配置实战

rospack depends1 报错排查:ROS依赖查询与环境变量配置实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 3:32:41 阅读更多 →
Vue2多页面应用模板:从vue.config.js到webpack配置的完整实践

Vue2多页面应用模板:从vue.config.js到webpack配置的完整实践

简介:Vue 2.0多页面应用模板面向需要同时维护多个独立页面的前端开发场景,旨在解决传统单页应用在官网、专题页等多入口项目中重复搭建构建流程、难以统一工程化配置的问题。资源包共32个文件,压缩后仅31KB,包含15个JavaScript脚本…

2026/10/15 3:32:41 阅读更多 →
NC65销售订单批量导入实战:从数据清洗到SQL脚本全攻略

NC65销售订单批量导入实战:从数据清洗到SQL脚本全攻略

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 3:31:40 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →