当前位置: 首页 > article >正文

Qt5和Qt6在Windows下编译有啥不同?一次搞懂配置命令从jom到CMake的变迁

Qt5与Qt6在Windows下的编译革命从jom到CMake的深度迁移指南当Qt6在2020年正式发布时许多开发者可能没有意识到这不仅仅是一次版本号的升级更是一场构建系统的技术革命。作为长期维护Qt跨版本项目的技术顾问我见证了无数团队在迁移过程中遇到的困惑——为什么熟悉的jom命令突然失效为什么CMake突然成为Qt编译的核心本文将带您穿透表象深入解析两大版本在Windows平台下的编译差异并提供可立即落地的实战方案。1. 构建系统的范式转移理解技术栈变迁Qt5时代构建系统采用的是典型的Qt风格解决方案。configure.bat脚本配合jom一个改进版的nmake构成了完整的编译工具链。这种设计在当年确实高效——jom作为Qt自家开发的并行构建工具能充分利用多核CPU加速编译过程。我曾在一台24核服务器上测试jom的并行编译效率比传统nmake高出近3倍。然而随着现代C项目的复杂度指数级增长这套系统的局限性逐渐显现模块化支持薄弱Qt5的qmake系统对模块依赖管理较为原始跨平台一致性差不同平台需要维护不同的构建配置扩展性受限与新兴工具链集成困难Qt6的解决方案是全面转向CMake。这不是简单的工具替换而是整个构建哲学的改变。CMake作为元构建系统可以生成Ninja、Makefile等多种后端同时提供统一的跨平台接口同一套配置可在所有平台运行现代依赖管理通过find_package实现精准控制生态整合完美兼容Conan、vcpkg等包管理器下表对比了两个版本的核心构建组件差异组件Qt5方案Qt6方案优势对比配置工具configure.batconfigure.batQt6的configure转为CMake生成器构建引擎jom/nmakeCMake NinjaCMake支持多后端更灵活依赖解析qmakeCMakeCMake依赖管理更现代化并行编译jom -jNcmake --build -jN语法更标准化实践建议对于新项目建议直接采用Qt6CMake组合。维护中的Qt5项目可逐步迁移先保持qmake构建同时添加CMake支持作为过渡。2. 环境准备跨越版本的基础设施配置无论Qt5还是Qt6良好的环境准备都是成功编译的前提。根据为数十家企业部署Qt环境的经验我总结出以下黄金配置清单2.1 硬件要求CPU至少4核推荐8核以上jom和CMake都能有效利用多核内存16GB起步大型静态编译需要32GB磁盘空间源码构建目录建议预留50GB SSD空间2.2 软件环境精要# 验证基础工具链Qt5/Qt6通用 cmake --version # 3.21Qt6要求 python --version # 3.6构建系统工具依赖 perl --version # 用于部分自动化脚本 # Qt5特别要求 jom --version # 1.1.3以上 # Qt6推荐环境 ninja --version # 1.8.2以上CMake默认后端常见陷阱排查如果jom命令未找到请检查是否解压到PATH目录VS2022需要安装使用C的桌面开发工作负载避免使用带空格的安装路径特别是Qt52.3 源码获取的艺术Qt5.15.12官方已停止公开更新需账户下载# 推荐使用aqt工具管理 pip install aqtinstall aqt install-qt windows desktop 5.15.12 win64_msvc2019_64Qt6.5.3开放获取支持模块化下载git clone git://code.qt.io/qt/qt5.git cd qt5 git checkout v6.5.3 perl init-repository --module-subsetqtbase,qtsvg专业提示大型团队建议搭建内部镜像仓库可节省90%的重复下载时间。3. Qt5编译实战jom时代的经典范式让我们以静态编译Qt5.15.12为例解析传统构建流程的精髓# 在VS2022 x64 Native Tools命令行中 mkdir build-static-qt5 cd build-static-qt5 ../qt-everywhere-src-5.15.12/configure.bat ^ -prefix C:\Qt\5.15.12-static ^ -static ^ -debug-and-release ^ -platform win32-msvc ^ -opengl dynamic ^ -skip qtwebengine ^ -nomake examples ^ -nomake tests关键参数解密-opengl dynamic解决现代显卡驱动兼容问题-skip qtwebengine这个模块编译需要额外8GB内存-platform必须与VS工具链匹配win32-msvc对应32位配置成功后启动并行编译jom -j 16 # 根据CPU核心数调整 jom install性能优化技巧使用RAMDisk可提升30%编译速度# 创建4GB RAM磁盘 imdisk -a -s 4096M -m R: -p /fs:ntfs /q /y对于CI环境添加-no-compile-examples可节省20%时间遇到内存不足时尝试jom -j 8 MEMORY_LIMIT20484. Qt6编译革命CMake构建新范式Qt6.5.3的编译流程看似相似实则内核完全不同mkdir build-static-qt6 cd build-static-qt6 ../qt-everywhere-src-6.5.3/configure.bat ^ --prefixC:\Qt\6.5.3-static ^ -static ^ -debug-and-release ^ -platform win32-msvc ^ -- -DCMAKE_PREFIX_PATHC:\Qt\6.5.3-static ^ -DCMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATIONbin颠覆性变化双横线--后是传递给CMake的参数模块控制改为CMake风格-DFEATURE_sqlOFF -DQT_BUILD_TESTSOFF编译命令也焕然一新cmake --build . --parallel 16 --target installCMake优势实践增量编译更智能只重建必要部分支持构建后自动执行安装cmake --install . --config Release高级调试支持cmake --build . --target VERBOSE15. 版本间编译策略深度对比5.1 模块化控制演进Qt5的模块排除较为粗糙-skip qtwebengine -nomake testsQt6则提供精细控制-DBUILD_qtwebengineOFF -DQT_BUILD_TESTSOFF5.2 依赖管理对比Qt5需要手动处理INCLUDEPATH $$[QT_INSTALL_HEADERS]/QtWebSockets LIBS -L$$[QT_INSTALL_LIBS] -lQt5WebSocketsQt6使用现代CMakefind_package(Qt6 COMPONENTS WebSockets REQUIRED) target_link_libraries(myapp PRIVATE Qt6::WebSockets)5.3 交叉编译支持Qt5需要特殊mkspec-platform win32-g -xplatform linux-arm-gnueabi-gQt6统一通过CMake工具链文件-DCMAKE_TOOLCHAIN_FILE../qtbase/mkspecs/android-clang6. 疑难排解与性能调优常见编译错误解决方案模块依赖冲突error: Unknown module(s) in QT: webengineQt5检查-skip和-nomake参数Qt6确认-DBUILD_qtwebengineON内存不足fatal error C1060: compiler is out of heap space解决方案# 减少并行任务数 jom -j 8 # 或 cmake --build . --parallel 8链接错误LNK2005: already defined in msvcrt.lib添加-static-runtime性能基准测试数据i9-13900K, 64GB RAM任务Qt5.15.12 (jom)Qt6.5.3 (CMakeNinja)提升全量编译82分钟68分钟17%增量编译4.5分钟1.2分钟73%磁盘占用38GB29GB24%7. 项目迁移实战策略根据帮助多个团队迁移的经验我总结出三阶段迁移法阶段一并行构建保持Qt5的qmake构建新增CMakeLists.txt进行Qt6适配使用条件编译处理差异if(QT_VERSION_MAJOR EQUAL 5) target_link_libraries(app Qt5::Core) else() target_link_libraries(app Qt6::Core) endif()阶段二功能对齐替换废弃API#if QT_VERSION QT_VERSION_CHECK(6, 0, 0) QRegExp rx(pattern); #else QRegularExpression rx(pattern); #endif阶段三优化构建采用Qt6专属特性qt_add_executable(app MANUAL_FINALIZATION SOURCES main.cpp ) qt_finalize_executable(app)关键决策点如果项目需要长期维护建议在2023年底前启动迁移。Qt5将在2023年12月结束所有商业支持。

相关文章:

Qt5和Qt6在Windows下编译有啥不同?一次搞懂配置命令从jom到CMake的变迁

Qt5与Qt6在Windows下的编译革命:从jom到CMake的深度迁移指南 当Qt6在2020年正式发布时,许多开发者可能没有意识到,这不仅仅是一次版本号的升级,更是一场构建系统的技术革命。作为长期维护Qt跨版本项目的技术顾问,我见…...

手把手教你用Vivado2022.2在Zynq UltraScale上搭建MIPI CSI-2视频采集系统(OV5640摄像头实战)

Zynq UltraScale平台MIPI CSI-2视频采集系统全流程开发指南 在嵌入式视觉系统开发中,MIPI CSI-2接口因其高带宽和低功耗特性,已成为摄像头模组的首选接口标准。本文将基于Xilinx Vivado 2022.2开发环境,详细讲解如何在Zynq UltraScale MPSoC平…...

不止于合规:用ISO 28000:2022框架,打造你的供应链安全‘韧性护城河’

超越合规:用ISO 28000:2022构建供应链安全韧性战略 当全球供应链遭遇黑天鹅事件时,那些仅满足基础合规要求的企业往往最先倒下。去年某跨国零售巨头的财报显示,因单一供应商中断导致的损失高达4.2亿美元——这个数字足以让任何董事会重新审视…...

基于Vedic数学的轻量级说话头生成技术解析

1. 项目概述:基于Vedic数学的轻量级说话头生成技术在教育技术和实时通信领域,说话头生成(Talking Head Generation, THG)技术正变得越来越重要。这项技术能够将语音信号转换为同步的嘴部动画,为虚拟教师、远程会议和数字人应用提供更自然的交…...

CVPR 2022 SCI框架实战:5分钟为YOLO目标检测模型集成低光增强模块

CVPR 2022 SCI框架实战:5分钟为YOLO目标检测模型集成低光增强模块 夜间安防摄像头拍到的画面总是模糊不清?自动驾驶车辆在隧道中突然"失明"?这些场景下的视觉识别难题,根源往往在于光线不足导致的图像质量下降。传统解决…...

AI代理日志可视化分析:前端工具实现与性能优化

1. 项目概述与核心价值如果你和我一样,日常重度使用 Claude Code、OpenClaw 这类 AI 编程助手,那你肯定也经历过这种痛苦:在终端里,面对一长串密密麻麻、结构复杂的.jsonl日志文件,试图复盘刚才的对话,或者…...

哔咔漫画下载器:打造个人永久漫画库的完整解决方案

哔咔漫画下载器:打造个人永久漫画库的完整解决方案 【免费下载链接】picacomic-downloader 哔咔漫画 picacomic pica漫画 bika漫画 PicACG 多线程下载器,带图形界面 带收藏夹,已打包exe 下载速度飞快 项目地址: https://gitcode.com/gh_mir…...

Obsidian Excel插件终极指南:在笔记中无缝创建和嵌入专业电子表格

Obsidian Excel插件终极指南:在笔记中无缝创建和嵌入专业电子表格 【免费下载链接】obsidian-excel 项目地址: https://gitcode.com/gh_mirrors/ob/obsidian-excel 你是否厌倦了在Obsidian笔记和Excel表格之间频繁切换?想要在知识管理流程中无缝…...

远程桌面复制粘贴失灵?别急着重装,先试试重启这个隐藏的Windows进程

远程桌面复制粘贴失灵?别急着重装,先试试重启这个隐藏的Windows进程 远程桌面连接(RDP)是现代办公场景中不可或缺的工具,但当你发现复制粘贴功能突然失效时,那种效率被硬生生切断的挫败感,相信…...

DSGE模型宝库:40+宏观经济模型一站式解决方案

DSGE模型宝库:40宏观经济模型一站式解决方案 【免费下载链接】DSGE_mod A collection of Dynare models 项目地址: https://gitcode.com/gh_mirrors/ds/DSGE_mod DSGE_mod是一个专为宏观经济研究者、政策分析师和经济学学生设计的Dynare模型集合,…...

对比使用 Taotoken 前后在模型调用失败时的容灾处理体验

模型调用容灾处理:Taotoken 路由能力的实际体验 1. 模型服务故障的常见场景 在实际开发中,调用大模型API时难免会遇到服务暂时不可用的情况。可能是由于供应商端的维护、突发流量高峰或网络波动等原因导致。传统直连单一模型供应商时,开发者…...

从Rudin到卓里奇:给数学系高年级生的5本硬核分析教材深度横评(附学习路线)

从Rudin到卓里奇:给数学系高年级生的5本硬核分析教材深度横评(附学习路线) 数学分析作为现代数学的基石,其教材选择往往决定了学习者对分析学的理解深度和思维高度。对于已经完成基础分析课程的高年级本科生或研究生而言&#xff…...

从Target预测孕妇到你的推荐系统:用4R框架设计更‘懂人心’的算法策略

从Target预测孕妇到智能推荐:4R框架如何重塑算法策略的底层逻辑 深夜加班的推荐算法工程师盯着屏幕上跳动的CTR数据,突然意识到一个问题:我们精心优化的点击率模型,真的比Target超市二十年前的孕妇预测模型更"懂"用户吗…...

植物大战僵尸终极修改器:PVZ Toolkit完整指南

植物大战僵尸终极修改器:PVZ Toolkit完整指南 【免费下载链接】pvztoolkit 植物大战僵尸 PC 版综合修改器 项目地址: https://gitcode.com/gh_mirrors/pv/pvztoolkit PVZ Toolkit是一款专为经典游戏《植物大战僵尸》PC版设计的开源修改工具,让玩家…...

如何自定义一个Spring Boot Starter

如何自定义一个 Spring Boot Starter?从零封装一个自己的自动配置本文基于 Spring Boot 2.7 / 3.x,核心原理通用一、从一个真实场景说起 最近咱们团队在做内部工具链建设,好几个项目都要集成统一的日志追踪功能——每个请求进来,自…...

终极远程桌面游戏手柄控制解决方案:RdpGamepad完全指南

终极远程桌面游戏手柄控制解决方案:RdpGamepad完全指南 【免费下载链接】RdpGamepad Remote Desktop Plugin for Xbox Gamepads 项目地址: https://gitcode.com/gh_mirrors/rd/RdpGamepad 你是否曾经想在远程桌面连接中使用Xbox游戏手柄,却发现手…...

别再敲空格了!Markdown换行的3种正确姿势(含Typora、VS Code实测)

Markdown换行全指南:告别空格与回车的错误姿势 第一次用Markdown写文档时,你是否也遇到过这样的困惑:明明在编辑器里敲了回车换行,预览时却变成了一整段?或者在不同平台发布时,排版突然变得乱七八糟&#…...

Translumo:3分钟掌握高效屏幕实时翻译,游戏视频无障碍体验完整指南

Translumo:3分钟掌握高效屏幕实时翻译,游戏视频无障碍体验完整指南 【免费下载链接】Translumo Advanced real-time screen translator for games, hardcoded subtitles in videos, static text and etc. 项目地址: https://gitcode.com/gh_mirrors/tr…...

如何在5分钟内完成手机号码精准定位:免费工具终极指南

如何在5分钟内完成手机号码精准定位:免费工具终极指南 【免费下载链接】location-to-phone-number This a project to search a location of a specified phone number, and locate the map to the phone number location. 项目地址: https://gitcode.com/gh_mirr…...

如何实现Claude Code多设备配置同步:开发环境一致性的终极指南

如何实现Claude Code多设备配置同步:开发环境一致性的终极指南 【免费下载链接】claude-code Claude Code is an agentic coding tool that lives in your terminal, understands your codebase, and helps you code faster by executing routine tasks, explaining…...

LangGraph MCP服务器:为AI助手注入生产级智能体开发模式

1. 项目概述:一个为AI助手注入LangGraph专业知识的MCP服务器如果你正在用Claude Desktop或者Cursor这类支持MCP(Model Context Protocol)的AI工具来开发LangGraph智能体,那你可能遇到过这样的场景:你问助手“怎么给我的…...

Microsemi Libero SoC 实战:用Verilog写个LED跑马灯,ModelSim仿真一次过(附源码)

Microsemi Libero SoC 实战:用Verilog写个LED跑马灯,ModelSim仿真一次过(附源码) 第一次接触FPGA开发板时,看着板载LED单调地闪烁总让人觉得意犹未尽。作为硬件描述语言的"Hello World",LED控制确…...

利用快马平台与copilot理念,十分钟打造智能代码生成器web原型

最近在尝试快速验证一个产品想法时,发现用传统方式从零开始搭建原型实在太耗时。正好了解到InsCode(快马)平台支持AI辅助开发,就尝试用它结合copilot的理念,十分钟内做出了一个智能代码生成器的web原型。整个过程比想象中顺利很多&#xff0c…...

LLM推理优化:KV缓存与长上下文处理关键技术

1. 项目背景与核心挑战在大型语言模型(LLM)的实际应用中,KV缓存优化和长上下文处理一直是工程落地的关键瓶颈。随着模型参数规模从7B增长到70B甚至更大,单次推理的显存占用和计算延迟问题愈发突出。特别是在处理长文档摘要、代码补…...

如何在macOS上搭建专业级桌面歌词同步系统

如何在macOS上搭建专业级桌面歌词同步系统 【免费下载链接】Lyrics Swift-based iTunes plug-in to display lyrics on the desktop. 项目地址: https://gitcode.com/gh_mirrors/lyr/Lyrics 你是否曾因听歌时找不到精准同步的歌词而烦恼?LyricsX 2.0是一款基…...

nnUNetv2模型集成(Ensemble)与后处理实战:如何自动找到并组合最优模型提升分割精度

nnUNetv2模型集成与后处理实战:解锁医学图像分割的终极性能 医学图像分割领域一直面临着数据稀缺、标注成本高和模型泛化能力不足等挑战。nnUNetv2作为当前最先进的自动分割框架,其核心价值不仅在于基础训练流程的自动化,更在于它提供了一套完…...

从一次真实的攻防演练讲起:攻击者是如何利用IIS PUT漏洞和短文件名猜解“拿下”一台Windows Server 2003的?

从一次真实的攻防演练讲起:攻击者是如何利用IIS PUT漏洞和短文件名猜解"拿下"一台Windows Server 2003的? 那是一个普通的周二下午,我们团队接到了一项内部红蓝对抗演练任务。目标系统是一个仍在运行的Windows Server 2003服务器&…...

将开源 Agent 框架 OpenClaw 无缝对接至 Taotoken 平台运行

将开源 Agent 框架 OpenClaw 无缝对接至 Taotoken 平台运行 1. OpenClaw 与 Taotoken 的集成价值 OpenClaw 作为开源 Agent 框架,为开发者提供了构建 AI 应用的灵活工具链。当需要对接多个大模型供应商时,直接管理不同厂商的 API Key 和计费方式会带来…...

英雄联盟自动化工具终极指南:League Akari 让你的游戏体验提升300%

英雄联盟自动化工具终极指南:League Akari 让你的游戏体验提升300% 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 你是否经常因为…...

Godot-MCP终极指南:如何用AI助手5分钟创建你的第一个游戏

Godot-MCP终极指南:如何用AI助手5分钟创建你的第一个游戏 【免费下载链接】Godot-MCP An MCP for Godot that lets you create and edit games in the Godot game engine with tools like Claude 项目地址: https://gitcode.com/gh_mirrors/god/Godot-MCP Go…...