2025/12/30 22:08:56
网站建设
项目流程
简单建设企业办公网站,昆明cms模板建站,哪些有名网站是用php做的,手机网站报名链接怎么做Qt 从 qmake 转向 CMake 是其构建系统战略的重大转型#xff0c;这一转变在 Qt6 中全面落地。下面从 技术、生态、工程实践 三个维度#xff0c;系统解释#xff1a; 一、Qt 使用 CMake 的核心好处
1. 强大的跨平台与多编译器支持
CMake 原生支持#xff1a; Windows这一转变在Qt6 中全面落地。下面从技术、生态、工程实践三个维度系统解释一、Qt 使用 CMake 的核心好处1.强大的跨平台与多编译器支持CMake 原生支持WindowsMSVC、MinGWLinuxGCC、ClangmacOSClang/XcodeAndroid、iOS、嵌入式QNX、INTEGRITY自动适配不同平台的构建工具链Ninja、MSBuild、Xcode 等 qmake 对非 Qt 项目的平台支持弱且难以扩展。2.无缝集成第三方库通过find_package()、FetchContent、VCPKG、Conan等方式轻松引入外部依赖。示例集成 OpenCV、SQLite、Protobuf 等只需几行代码find_package(OpenCV REQUIRED)target_link_libraries(myapp PRIVATE ${OpenCV_LIBS})❌ qmake 需手动写.pri文件或硬编码路径维护成本高。3.现代 C 工程标准CMake 是C 社区事实标准被 Google、Microsoft、NVIDIA 等广泛采用支持C 标准版本控制CXX_STANDARD 17/20编译选项精细控制警告、优化、宏定义并行构建Ninja 后端速度极快4.完整的开发生命周期支持功能CMake 支持qmake 支持单元测试CTest✅ 原生集成❌ 需手动脚本安装与打包install✅install()命令⚠️ 有限支持生成 IDE 项目文件✅ VS/Xcode/CLion 等⚠️ 仅部分支持静态分析/CI/CD✅ 天然契合❌ 困难5.更好的模块化与可维护性CMake 支持add_subdirectory()实现多模块项目可编写可复用的 CMake 模块.cmake文件逻辑清晰易于团队协作 qmake 的.pro文件在大型项目中容易变得混乱“面条式配置”二、Qt 为什么放弃 qmake1.qmake 的设计局限性语法简单但功能弱缺乏条件逻辑、函数、作用域等编程能力扩展性差无法轻松支持新平台或新工具链非标准只有 Qt 项目使用社区生态孤立 官方评价Qt 公司博客“qmake has served us well, but it’s reached its limits in terms of scalability and maintainability.”2.Qt 自研构建系统 qbs 的失败Qt 曾尝试推出qbs基于 JavaScript 的构建系统但因学习曲线陡峭社区接受度低维护成本高最终于2019 年宣布停止开发⏪ 这迫使 Qt 必须选择一个已有强大生态的构建系统→ CMake 成为唯一合理选择。3.行业趋势倒逼主流 C 项目如 LLVM、VTK、OpenCV全部使用 CMake开发者期望“一套构建系统走天下”Visual Studio、CLion、VS Code 等 IDE 对 CMake 原生支持远超 qmake 数据GitHub 上 CMake 项目数量是 qmake 的100 倍以上4.Qt 自身架构演进需求Qt6 强调模块化、轻量化、云原生需要更灵活的构建系统来按需编译子模块支持 WebAssembly、Android AAR 等新目标与 Conan/VCPKG 等现代包管理器集成❌ qmake 无法满足这些现代工程需求。三、qmake vs CMake 关键对比特性qmakeCMake语言自定义.pro语法CMake 脚本语言类 DSL跨平台有限主要为 Qt 服务极强全平台第三方库集成困难简单find_package社区生态Qt 专属全 C 社区IDE 支持Qt Creator 为主VS / Xcode / CLion / Qt Creator 全支持未来前景❌ 已弃用Qt6 不推荐✅ Qt 官方主推 Qt 官方明确表示qmake 在 Qt6 中仅用于维护旧项目新项目必须用 CMake。四、对开发者的建议新项目直接使用CMake Qt6旧项目迁移小项目手动重写CMakeLists.txt大项目使用工具辅助如qmake2cmake脚本但需人工校验学习重点掌握find_package(Qt6 ...)理解AUTOMOC/AUTOUIC/AUTORCC学会使用qt_add_executable()Qt6.3 新封装✅ 总结Qt 转向 CMake 不是“折腾”而是“进化”。对 Qt 公司降低维护成本拥抱开源生态对开发者获得更强大、更标准、更未来的构建体验虽然 CMake 初学曲线略陡但它是现代 C 开发的必备技能投资回报极高。五、qmake 是什么qmake是 Qt 自 2002 年起随 Qt 3 引入的专用构建系统。核心功能读取.pro文件生成 MakefileLinux/macOS或 Visual Studio 项目Windows。优点简单易用几行代码就能编译 Qt 项目自动处理 MOC/UIC/RCC与 Qt Creator 深度集成缺点语法简陋缺乏编程能力无函数、作用域、复杂逻辑扩展性差难以支持新平台或非 Qt 依赖仅适用于 Qt 项目生态封闭 qmake 本质是一个“为 Qt 量身定制的轻量级构建生成器”。六、为什么 Qt 要推出 qbs动机大约在2011–2013 年Qt 团队意识到 qmake 已无法满足现代 C 项目的复杂需求于是启动了qbs项目。✅ qbs 的设计目标目标说明统一构建流程不再生成中间文件如 Makefile而是直接调用编译器实现“声明式构建”高性能基于增量构建和智能缓存比 qmake make 更快跨平台原生支持内置对 MSVC、GCC、Clang、Xcode 等的支持无需生成中间项目文件现代语言特性使用类似 JavaScript 的脚本语言基于 QtScript支持函数、模块、条件逻辑脱离 Make 依赖在 Windows 上不再依赖 MinGW/MSYS纯原生构建 qbs 的口号是“Build once, run anywhere — without Makefiles.”七、qbs 和 qmake 的关系维度qmakeqbs定位轻量级项目生成器完整的构建执行引擎工作方式生成 Makefile / .vcxproj → 调用 make/msbuild直接解析项目文件 → 调用编译器无中间文件配置语言自定义.pro语法简单但弱JavaScript-like 脚本.qbs文件更强大依赖管理手动指定路径支持模块化依赖和自动查找与 Qt 集成深度绑定同样深度绑定但更灵活qbs 不是 qmake 的升级版而是一个全新设计的替代品。八、qbs 为何失败尽管技术先进qbs 最终在2019 年被 Qt 官方宣布停止开发。原因如下1.社区接受度极低开发者已习惯 CMake/qmake学习新语法成本高“又一个 DSL”缺乏第三方库支持没人写.qbs配置2.CMake 的崛起CMake 在 2010 年代后期迅速成为C 构建事实标准Google、Microsoft、NVIDIA 等大厂全面采用CMake 3.0 引入target_*命令后现代 CMake 语法清晰且强大3.维护成本过高Qt 团队需同时维护 qmake、qbs、CMake 支持资源有限不如聚焦一个主流方案4.IDE 支持不足除 Qt Creator 外其他 IDEVS、CLion对 qbs 几乎无支持而 CMake 被所有主流 IDE 原生支持 Qt 官方博客2018坦言“While qbs has some technical advantages, the ecosystem has clearly chosen CMake.”九、Qt 的最终选择拥抱 CMake2016 年Qt 5.7 开始实验性支持 CMake2018 年Qt 5.12 提供完整 CMake 支持2020 年Qt 6.0默认使用 CMakeqmake 降级为兼容模式2019 年正式宣布停止 qbs 开发✅ 这标志着 Qt 彻底放弃“自研构建系统”转而融入 C 主流生态。三者关系总结qmake (2002)└── 简单但局限 → 无法满足现代需求↓qbs (2013)└── 技术先进但生态失败 → 被社区抛弃↓CMake (2020)└── 行业标准 → Qt 全面拥抱对开发者的启示不要重复造轮子即使技术更优若脱离生态难逃失败顺应行业趋势CMake 已成为 C 构建的“普通话”Qt 的务实转型从“自给自足”转向“融入生态”是成熟开源项目的标志✅ 总结问题答案qbs 是什么Qt 推出的新一代构建系统试图替代 qmakeqbs 和 qmake 关系qbs 是 qmake 的“精神继任者”但架构完全不同为什么推 qbsqmake 功能不足Qt 想要更强大、更快、更现代的构建工具为什么放弃 qbs社区不买账CMake 成为主流维护成本太高现在该用什么CMake—— Qt 官方唯一推荐的新项目构建系统如今qbs 已成为 Qt 历史中的一个“技术理想主义”案例而 CMake 则是现实的最佳选择。qt为什么转向用cmake放弃qmake_qt现在还支持cmake了么?-CSDN博客