无人机智能硬件【免费下载链接】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),仅供参考