乘风破浪,遇见最美Windows 11之现代Windows桌面应用开发 - QT(v6.2)跨平台解决方案,Window11 + Visual Studio 2022手工编译

什么是QT跨平台解决方案

Qt是完整的软件开发框架

image

Qt框架包含一整套高度直观和模块化的C++库类,并加载了API以简化您的应用程序开发。Qt生成高度可读、易于维护和可重用的代码,具有较高的运行时性能和较小的占用空间——而且它是跨平台的。

关于Qt Group

image

Qt Group(纳斯达克赫尔辛基股票代码:QTCOM)是一家全球软件公司,在70多个行业拥有强大的影响力,是数百万设备和应用程序背后的领先独立技术。Qt被全球主要的跨国公司和开发人员使用,该技术使其客户能够提供卓越的用户体验并推进他们的数字化转型计划。Qt通过其跨平台软件框架实现了这一点,该框架用于在商业和开源许可下开发应用程序和设备。

image

全球大约有100万开发人员使用Qt技术。我们支持跨所有操作系统、平台和屏幕类型的单一软件代码,从台式机和嵌入式系统到关键业务应用程序、车载系统、可穿戴设备和连接到物联网的移动设备。

价值观

  • 创新

    • 我们的技术源于创新
    • 我们使客户的创新产品开发成为可能
    • 我们大胆思考,力求持续改进
  • 透明度

    • 我们的产品开发和商业模式基于透明、信任和开放
    • 我们的目标和沟通是透明的
    • 我们的效率基于我们工作方式中的分享、关怀和透明度。
  • 合作

    • 协作是我们所做的一切的中心
    • 我们是客户的战略合作伙伴,帮助他们创建一流的解决方案
    • 我们在我们的社区中实现协作
    • 我们一起培养学习、分享和发现

QT核心优势

当今的消费者需要并期待更快、更直观的用户体验以及更现代、更可靠和响应更快的用户界面。由于世界各地的人们已经习惯了他们的智能手机设定的高基准,人们的期望很高。

image

我们Qt已帮助70多个行业的客户开发世界一流的桌面、嵌入式和移动操作系统产品。全球最重要的公司使用Qt创建医疗、车载系统和工业自动化设备。为什么?

  • 缩短上市时间:影响上市时间的关键因素是实际产品开发时间以及监管和合规时间框架。Qt的各种库和工具集让您的软件团队能够更快地开发。开发人员可以专注于创造最佳用户体验,而不是编码已经为您编码的内容。使用Qt,原型设计–开发–测试–部署的循环更快、更高效。Qt还通过我们的内部资源或行业领先的合作伙伴网络支持您的监管和合规工作。

  • 可扩展的解决方案:Qt是一个跨平台的框架,兼容多种操作系统和硬件。您所需要的只是编写一次源代码,并能够将其部署在您需要的任何地方。您不需要专门针对不同硬件架构或操作系统进行编码的开发团队。

  • 更低的总拥有成本(TCO):所需的资源更少,上市时间更快,这意味着更低的总拥有成本和更快的收入确认。

代码少,创造更多,到处部署。

QT公司历史

2017年,Qt Group Plc筹集了1500万欧元的股权以资助增长投资

image

组织权利发行以加速增长。Qt Group的目标是通过增加自己的运营地点和零售商的数量来扩大其销售网络。公司自己的运营地点的计划是覆盖公司最大的地域市场。

该公司还希望在选定的行业中开发产品。通过引入额外的行业特定解决方案和集成,公司可以提供更好的价值并增加市场份额和收入。

2016年,Qt Group Plc从Digia分拆,并在赫尔辛基纳斯达克独立上市

image

Digia Plc.正在分拆,因此与Digia的Qt业务相关的所有资产、负债和责任都转移到了一家名为Qt Group Plc.的新公司。分拆实施后,Qt Group Plc.成为一家独立的上市公司。其股票自2016年5月2日起在纳斯达克赫尔辛基有限公司公开交易。Qt集团股票的交易代码为QTCOM。

2014年,Qt公司在Digia成为自己的实体

image

从2014年初开始,Digia根据Qt和国内两个业务部门报告其数据。Qt部门包括公司的国际Qt软件业务。

2012年,Digia从诺基亚手中收购Qt软件技术和业务

image

Digia Plc.与诺基亚签署协议,从诺基亚收购Qt软件技术和Qt业务。收购后,Digia负责之前由诺基亚开展的所有Qt活动,包括研发、商业和开源许可和服务业务。

2011年,Digia从诺基亚手中收购了Qt商业授权业务

image

2011年3月,Digia Plc.与诺基亚公司签署协议,收购Qt商业许可和服务业务。Digia的目标是扩大和发展收购的产品业务,特别是提供产品化支持服务来补充产品,以及基于客户需求的额外功能。该业务交易支持Digia的战略目标,即增加来自国际产品业务的营业额。

2008年,奇趣科技(Trolltech)被诺基亚(Nokia)收购

image

2008年6月,诺基亚宣布已完成对Trolltech ASA (OSE:Troll)的收购,后者是一家拥有世界一流软件开发平台和框架的公认软件供应商。此次收购使诺基亚能够加快移动设备和桌面应用程序的跨平台软件战略,并发展其互联网服务业务。奥斯陆证券交易所将Trolltech ASA退市,上市的最后一天是2008年6月17日。

image

诺基亚给QT增加了LGPL(GNU Lesser General Public License)的授权模式。诺基亚联合英特尔利用Qt开发了全新的智能手机系统MeeGo,后面诺基亚被微软收购,被迫放弃了MeeGo

2006年,奇趣科技(Trolltech)首次公开募股到奥斯陆交易所

image

奇趣科技(Trolltech) 提供跨平台的软件开发框架和应用平台。Trolltech的产品使公司能够在各种操作系统和电子设备上轻松构建和部署软件。该公司为桌面和嵌入式应用程序提供商以及消费电子和移动供应商提供服务,他们在提供用户友好和差异化的软件方面面临挑战。

1995年,Qt框架第一个公开版本由奇趣科技(Trolltech)发布

image

1995年,Qt框架由两位挪威软件工程师Haavard Nord和Eirik Chambe-Eng开发,于1995年5月首次公开发布。Qt的第一个公开版本由名为奇趣科技(Trolltech)的公司发布。

QT的应用

1997年,Qt被用来开发Linux桌面环境KDE,大获成功,使Qt成为Linux环境下开发C++ GUI程序的事实标准

使用Qt开发:

WPS、YY语音、Skype、豆瓣电台、虾米音乐、淘宝助理、千牛、暴雪的战网客户端、Virtual Box、Opera、咪咕音乐、Google Earth、Adobe Photoshop Album、Autodesk Maya、Skype等。

QML与C++

Qt 4时代的主流就是传统部件(或叫控件)编程,所用的语言一般是C++。Qt 5诞生之时,正是手机移动设备蓬勃发展的时候。

为了适应手机移动应用开发,Qt5将QML脚本编程提到与传统C++部件编程相同的高度,力推QML界面编程,当然QML主要用于手机移动应用程序。QML包含大量使用手机移动设备的功能模块,比如基本部件(Qt Quick模块)、GPS定位、渲染特效、蓝牙、NFC、WebkKit等等。

QML类似于网页设计的HTML,是一种标记语言,我们可以借助CSS对它进行美化,也可以借助JavaScript进行交互。有Web开发经验的读者学习QML将非常轻松。

使用QML开发界面主要有以下几个优点:

  • QML非常灵活,可以做出非常炫酷的效果,例如QQ、360、迅雷等都不在话下。
  • QML是标记语言,见名知意,非常容易编写和阅读,大大提高了开发和维护效率。
  • QML界面简洁大气,有很多动画,适合移动端。
  • 不同平台下的QML使用相同的渲染机制,界面效果一致,不会随操作系统的不同而变化。

QML只能用来进行界面设计和人机交互,也就是只能胜任UI部分,在底层仍然需要调用C++编写的组件来完善功能,比如访问数据库、网络通信、多线程多进程、文件读写、图像处理、音频视频处理等都离不开C++。

QT提供的工具链

a. 设计工具 - Qt Design Studio

https://www.qt.io/product/ui-design-tools

设计令人惊叹的用户界面和终极用户体验所需的一切。

使用预设的UI组件定义从线框到最终实现的UI外观。将UI设计文件从2D和3D工具导入Qt Design Studio,Qt Design Studio可以将它们转换为代码供开发人员使用。Qt Design Studio原型制作功能使您的设计栩栩如生,并模拟和验证交互和动态行为。您可以在桌面或目标设备上实时测试、预览和微调您的设计以达到像素完美。

image

b. 开发工具 - Qt Creator

https://www.qt.io/product/development-tools

Qt拥有自己的跨平台IDE,并且充满了专为一次性开发应用程序和UI并跨多个操作系统部署它们而设计的工具。

Qt Creator是一个集成开发环境(IDE),它为您提供了使用Qt应用程序框架设计和开发应用程序的工具。Qt旨在一次性开发应用程序和用户界面,然后将它们部署到多个桌面、嵌入式和移动操作系统或Web浏览器(实验性)。Qt Creator为您提供了在整个应用程序开发生命周期中完成任务的工具,从创建项目到将应用程序部署到目标平台。

image

Qt 6.2 LTSC

QT版本一览

https://wiki.qt.io/Main

版本 状态 新特性
Qt 6.4 N/A New Features in Qt 6.4
Qt 6.3 Under development New Features in Qt 6.3
Qt 6.2 Long Term Support Release New Features in Qt 6.2
Qt 6.1 Standard Support New Features in Qt 6.1
Qt 6.0 End-of-Life (as of December 2021) New Features in Qt 6.0
Qt 5.15 Long Term Support Release New Features in Qt 5.15
Qt 5.12 End-of-Life (as of December 2021) New Features in Qt 5.12
Qt 4.8.7 End-of-Life (as of December 2015) N/A

https://code.qt.io/cgit/qt/qtreleasenotes.git/about/qt/6.2.0/release-note.md

我很高兴地宣布Qt 6.2的正式发布。它是自我们开始迈向全新Qt主要版本以来,一直在努力的版本。Qt 6.2得益于我们为Qt6所做的所有架构升级,并包含了Qt 5.15中几乎所有深受喜爱的附加模块。

image

Qt 6.2也是Qt公司为商业版客户提供的Qt6系列中第一个长周期支持版。

在我们升级到Qt6的计划中,我们首先关注Qt的核心,为了能在未来几年保持竞争力而做了架构级别的改变。但这一投入也意味着我们必须在发布Qt6.0时对所支持的附加模块做出妥协。因此,尽管Qt6.0比Qt 5.15更好、更先进,但它确实缺乏Qt 5.15提供的某些功能。在Qt 6.2中,我们缩小了差距,并包含了Qt 5.15中的所有常用功能以及为Qt6添加的新功能。

随着Qt 6.2的发布,几乎所有Qt用户都应能将其代码从Qt5迁移到Qt6。我们已将自己的工具实现了迁移。也就是说,QtDesignStudio2.2和即将发布的QtCreator6beta版都基于Qt 6.2长周期支持版。

除了增加缺失的功能外,Qt 6.2还专注于提高稳定性、性能和开发者的生活质量。

Qt 6中架构级别的更改

我们对Qt 6进行了一些更广泛的架构更改,并以此构建Qt 6.2以及未来版本。这些变化包括

  • 利用C++ 17 开发Qt 6时,我们希望建立在现代C++标准之上。C++ 17是当时的最新版本,而Qt 6现在依赖于C++ 17兼容编译器。这使得我们可以清理和改进我们的代码库,并能为用户提供更现代的API。
  • 在处理大型数据集和性能方面改进了低级容器类
  • 下一代QML 我们已开始更努力地更新QML语言,使其更安全、更易用。Qt 6.0–6.2奠定了基础,但这种努力将在整个Qt 6系列中继续。
  • 将属性绑定引入C++ 属性绑定是使QML取得成功的概念之一。在Qt 6中,我们已经在C++中实现了这个概念。
  • 新的图形架构 Qt 6在如何处理与底层操作系统的API集成方面采用了全新的架构。由于新的渲染硬件接口(RHI),Qt 6现在默认使用每个系统上可用的最佳图形API,显著提高了兼容性,尤其是在桌面和移动操作系统(如Windows和macOS以及iOS)上。
  • Qt Quick统一的2D和3D, Qt Quick一直是构建动画和流畅2D用户界面的框架。我们在Qt 6中还简化了将3D内容集成到基于QML的应用程序流程。深度集成使得在任何级别混合2D和3D内容都变得很容易,同时获得系统的最大性能。
  • CMake构建系统 从Qt 6开始,我们将构建系统从qmake改为cmake,这是当今基于C++应用程序的标准构建系统。虽然我们仍将在Qt 6整个生命周期内支持qmake,但初步用户报告表明切换到cmake后有显着改进。

Qt 6添加的模块

https://doc.qt.io/qt-6/qtmodules.html

开发Qt 6.2的主要工作之一是重新添加我们在Qt 6.0中遗漏的所有模块和功能。除了极少数例外,Qt 5.15支持的所有模块现在也在Qt 6.2中得到支持。

在Qt 6.2中,我们添加了对以下模块的支持(在Qt 6.1中已有的模块之上):

  • Qt Bluetooth
  • Qt Multimedia
  • Qt NFC
  • Qt Positioning
  • Qt Quick Dialogs
  • Qt RemoteObjects
  • Qt Sensors
  • Qt SerialBus
  • Qt SerialPort
  • Qt WebChannel
  • Qt WebEngine
  • Qt WebSockets
  • Qt WebView

这些模块的API主要向后兼容Qt 5,并且在移植到Qt 6时只需要对用户代码进行微调。

Qt 6.2中的新功能

https://wiki.qt.io/New_Features_in_Qt_6.2

a. Qt Quick 3D

Qt Quick 3D得到了一些很酷的新功能,现在支持实例化渲染,允许您用不同变换渲染大量相同的对象。我们还添加了一个用于向场景添加3D微粒效果的API。

输入处理已得到改进,我们现在可以为嵌入在3D场景中的2D项目正确创建Qt Quick输入事件。我们还添加了一个从场景任意点进行基于光线的拾取的API。

b. QML工具

https://qt-china.blog.csdn.net/article/details/120552464

Qt 6.2对QML工具进行了较大改进。我们现在有一个公共CMake API,它极大地简化了创建您自己QML模块的过程。

QML linter(qmlint)是一种工具,用于检查QML源代码的最佳实践、潜在的编码和性能问题,并帮助编写更易于维护的QML。该工具经历了巨变,现在可以通过配置文件在命令行级别进行完全配置,甚至可以对QML文件本身中的单个块进行配置。此外,它现在可以生成JSON输出以简化与其他工具或自动化系统的集成。

image

QML格式化程序(qmlformat)现在使用QML dom库,大大改进了生成的输出。

c. Qt Multimedia

https://qt-china.blog.csdn.net/article/details/120235422

Qt Multimedia在Qt 6中经历了巨大变化。它是我们在Qt5生命周期中不满意的API之一。因此,我们退后一步,对模块做了一些更广泛的API和架构更改,而没太考虑向后兼容性。

image

尽管如此,从Qt 5中的Qt Multimedia移植到Qt6应该相对简单。

Qt 6中的Qt Multimedia确实支持一些我们从未在Qt5中正确支持且被多次要求增加的功能,包括支持字幕、回放时的语言选择以及可配置的媒体捕获设置。

内部架构已经过清理,不再像Qt5那样通过公共API公开。这使我们能够更快地修复bug,并且使添加新功能变得更加容易。您可以在Qt 6中的Qt Multimedia模块一文中找到更多详细信息。

然而,由于这些巨大的变化,该模块在实现中可能存在相当多的bugs。但是,我们相信多媒体是必不可少的一项功能,将在Qt 6.2中完全支持该模块。

因此,我们将在补丁级版本的常规提交策略上有所偏离,如果需要修复较大的问题,可能会添加一些较小的API。

此外,在即将发布的补丁级版本中,我们将尽快努力修复任何报告的错误。

d. 较小的一些改进

几乎所有其他模块都有许多较小的API添加和改进。

我们移植了许多API来利用新的属性系统,以便您使用C++中的属性绑定。这项工作尚未完成,我们将在未来的版本中继续。

我们还修复了许多API缺点和不同地方缺失的功能。仅举几个例子:

  • Qt Charts增加了提高便利性并方便定制的新API。
  • 为QImage添加了浮点图像格式。
  • QByteArray::number()现在可以正确处理不等于10基数的负值。
  • QLockFile现在具有采用std::chrono的重载
  • Qt Network支持多个可以在运行时共存的SSL后端。

Qt 6.2对新平台的支持

image

我们在Qt 6.2上做了很多工作来改进对当前支持平台的支持,包括台式机和移动端,例如,改进我们对HighDPI渲染的支持和在iOS上添加NFC后端。

除此以外,Qt 6.2大幅扩展了支持平台的范围:

Qt 6.2完全支持Apple Silicon上的macOS。Qt现在可以轻松创建通用二进制文件,并在Intel和Apple Silicon上为macOS进行开发。当然,该版本也在我们的CI系统中进行了全面测试。Qt应用程序一贯能在Apple芯片的Rosetta层上运行,但Qt 6.2现在全面支持在Apple原生芯片上运行。

Qt 6.2还恢复了对INTEGRITY和QNX实时操作系统的支持。支持需要C++17工具链和最新版本的操作系统。QNX的最低要求是7.1版,在INTEGRITY上,我们支持19.0.13版。

针对Qt 6.2的webOS验证也已完成,以进一步加强Qt对webOS的承诺。

支持Windows 11的工作正在进行中,我们希望能够在6.2补丁级版本中为其提供全面支持。Qt6.2还提供了对ARM硬件上的Windows的技术预览版支持。

最后,我们改进了对WebAssembly的支持,在Qt 6.2中以技术预览版发布。

从Qt 5迁移到Qt 6.2指南

https://doc.qt.io/qt-6/portingguide.html

在开发Qt 6时,与Qt 5的源代码兼容性一直是我们工作的关键部分。有时我们不得不在某种程度上打破这种兼容性,以进行必要的架构更改,或为我们带来巨大的性能优势。

image

在大多数情况下,从Qt 5移植到Qt 6应该很简单。Qt 6移植指南列举了所需的步骤,并提供了更多信息。您还可以从我们的合作伙伴或我们的顾问获得移植帮助。

移植到Qt 6的典型步骤是:

  • 检查您是否使用了受支持的编译器和平台版本
  • 首先在Qt 6模式下使用Qt 5.15编译(使用QT_DISABLE_DEPRECATED_BEFORE宏)
  • 然后用Qt 6.x编译——如果需要,在移植阶段利用兼容性模块

有了这些,您就可以在Qt 6上运行应用程序,并可以开始使用它提供的所有新特性和功能。例如,如果您的应用程序使用QML,请运行qmlint工具,并修复它给出的警告。

Qt v6.2对Windows 11的支持

https://www.qt.io/blog/qt-6.2-and-windows-11

现在Windows 11已经发布了几周,我们一直忙着用Qt 6.2来验证它,以加强我们对Windows作为Qt开发者使用的关键开发操作系统的承诺。我们很高兴地说,我们没有发现重大问题。一些小的用户界面细节正在解决中,但没有任何问题会妨碍Qt开发者使用Windows 11进行开发。这也包括支持Windows 11作为交叉编译的目标。然而,我们对你可能有的关于Qt Windows 11支持的任何反馈非常感兴趣。

为此,我们准备了以下Jira过滤器。

https://bugreports.qt.io/browse/QTBUG-95374?jql=labels %3D Windows11

如果你在你的Jira票据上添加"Windows11"的标签,它就会在这个过滤器中显示出来,帮助我们更快地识别任何进一步的问题。

我们对旧版Qt中的新操作系统版本的一般政策是,我们将在Qt 5.15 (LTS)中修复问题,但为了能够专注于为开发者提供最先进的增强功能,Windows 11特有的新功能只在最新的Qt版本中支持,目前是Qt 6。因此,例如,我们将努力使Qt 6应用程序在Windows 11上表现得尽可能原生,而在Windows 11上运行的Qt 5.15应用程序可能有一些限制。在可预见的未来,我们还将支持Windows 10。

获取QT

获取QT 6.2.x(在线安装)

a. Windows版在线安装器

https://www.qt.io/download-thank-you?os=windows

b. MacOS版在线安装器

https://www.qt.io/download-thank-you?os=macos

c. Linux版在线安装器

https://www.qt.io/download-thank-you?os=linux

获取QT 6.2.3(离线源码)

QT从开源版本的v5.15开始不再直接提供编译好的离线安装包,而是直接提供源码,需要下载后自行编译。

Due to The Qt Company offering changes, open source offline installers are not available any more since Qt 5.15

a. Windows版离线源码包

https://download.qt.io/official_releases/qt/6.2/6.2.3/single/qt-everywhere-src-6.2.3.zip.mirrorlist

b. MacOS/Linux版离线源码包

https://download.qt.io/official_releases/qt/6.2/6.2.3/single/qt-everywhere-src-6.2.3.tar.xz.mirrorlist

获取QT 5.15.2(离线源码)

QT v5.15.x版本是目前市场上占比最高的一个版本。

a. Windows版离线源码包

https://download.qt.io/official_releases/qt/5.15/5.15.2/single/qt-everywhere-src-5.15.2.zip.mirrorlist

b. MacOS/Linux版离线源码包

https://download.qt.io/official_releases/qt/5.15/5.15.2/single/qt-everywhere-src-5.15.2.tar.xz.mirrorlist

获取QT 5.14.2(离线安装)

Qt v5.14.2是开源版本里面最后一个提供编译后离线安装包的版本。

a. Windows版离线安装包

b. MacOS版离线安装包

c. Linux版离线安装包

历史版本资源

https://download.qt.io/archive/qt/

手动编译QT Windows版

https://doc.qt.io/qt-6/windows-building.html

1. 下载Windows版源包

建议在C盘根目录下一个名为Qt的文件夹,在里面根据版本号来划定文件夹,比如这里我们可以划分6.2.35.15.2,每个版本号文件内部新建名为Src的子文件夹。

image

image

image

根据前面的地址下载好Windows版源包,这里先以Qt Offline-Src-Package v5.15.2.zip From 上海交大Qt Offline-Src-Package v6.2.3.zip From 上海交大为例,下载后解压到C:\Qt\$Verison\Src目录,这里根据你的情况来放置,不易路径过长,路径中也不要出现特殊符号和中文为佳。

image

image

image

image

2. 准备构建环境CMake(必选)

https://cmake.org

CMake(Cross platform Make)是个一个开源的跨平台自动化建构系统,用来管理软件建置的程序,并不相依于某特定编译器。

要求必须安装好CMake的v3.16及其以上版本,这里介绍两种安装方式

a. 通过CMake官网下载安装

https://cmake.org/download/

image

记得勾选"Add CMake to the system PATH for all Users"这个选项,它会在安装后帮你把CMake添加到系统的环境变量里面。

image

安装后,CMake的所在位置位于:C:\Program Files\CMake\

image

b. 通过Winget搜索CMake下载安装

winget install Kitware.CMake

image

默认情况,它安装时会帮你把CMake添加到系统的环境变量里面,无需手动再操作了,不过需要重启Windows终端才可以生效。

c. 检查CMake是否正确安装

不出意外的,通过检查系统的PATH我们发现,CMake的安装运行目录已经被加入了,这很好,按道理命令行能正确识别它了。

image

cmake --version

image

3. 准备构建环境Ninja(必选)

https://ninja-build.org

Ninja是Google的一名程序员推出的注重速度的构建工具,一般在Unix/Linux上的程序通过make/makefile来构建编译,而Ninja通过将编译任务并行组织,大大提高了构建速度。

Ninja是一个小型的构建系统,专注于速度。它在两个主要方面不同于其他构建系统:它旨在由更高级别的构建系统生成其输入文件,并且它被设计为尽可能快地运行构建。

a. 通过Ninja官网下载安装

https://github.com/ninja-build/ninja/releases

下载后得到一个ninja.exe文件,把它找到位置安放好。

image

通过系统的搜索功能直接搜索"环境变量"这个关键词,进入环境变量的设置界面。

image

ninja.exe的所在的目录位置加到系统环境变量的PATH里面即可。

image

重新打开一次Windows终端,这时候就能识别ninja命令了。

ninja --version

image

4. 准备构建环境Perl(必选)

a. 什么是Perl

https://www.perl.org

image

Perl,是英文全称"Practical Extraction and Report Language"的简称,中文名为"实用报表提取语言",它是一种功能丰富的计算机程序语言,运行在超过100种计算机平台上,适用广泛,从大型机到便携设备,从快速原型创建到大规模可扩展开发。

Perl特别适合系统管理和Web编程。实际上已经被用在所有Unix(包括Linux)捆绑在一起作为标准部件发布,同时也用于Microsoft Windows和几乎所有操作系统。其在Windows上两大著名的编译器分别是:"ActiveState Perl"、"Strawberry Perl"。

b. 安装ActiveState Perl(可选)

ActiveState提供免费的社区版本和商业支持的用于Win32的Perl和用于Win64的Perl的二进制发行版。

https://www.activestate.com/products/perl/

powershell -Command "& $([scriptblock]::Create((New-Object Net.WebClient).DownloadString('https://platform.activestate.com/dl/cli/pdli01/install.ps1'))) -activate-default ActiveState-Labs/Perl-5.32"

或者通过Winget安装

winget install 'ActiveState.ActivePerl'

c. 安装Strawberry Perl(推荐)

https://strawberryperl.com

适用于Windows的100%开源Perl,与其他地方的Perl完全相同;这包括使用来自CPAN的模块,而不需要二进制包。

image

Strawberry Perl是MS Windows的perl环境,包含运行和开发perl应用程序所需的一切。它旨在尽可能接近UNIX系统上的perl环境。它包括perl二进制文件、编译器(gcc)+相关工具、所有外部库(加密、数学、图形、xml...)、所有捆绑的数据库客户端和所有您对Strawberry Perl的期望。

或者通过Winget安装

winget install 'StrawberryPerl.StrawberryPerl'

image

d. 通过Cygwin附带安装Perl(可选)

Cygwin是一个在Windows平台上运行的类UNIX模拟环境,在一些芯片开发场景下,开发人员并不使用IDE(集成开发环境),也不使用Linux,而是使用在Windows下的Cygwin环境去Makefile。

https://www.cygwin.com

在Cygwin中已经安装了基础的perl。

e. 验证Perl安装

不出意外的,通过检查系统的PATH我们发现,Strawberry Perl的安装运行目录已经被加入了,这很好,按道理命令行能正确识别它了。

image

重启一次Windows终端来查看下,发现它已经可以正常工作了。

perl --version

image

5. 准备构建环境Python(必选)

a. 什么是Python

Python是一种编程语言,可让您快速工作并更有效地集成系统

Python是一种清晰而强大的面向对象编程语言,可与Perl、Ruby、Scheme或Java相媲美。

Python的一些显着特性:

  • 使用优雅的语法,使您编写的程序更易于阅读。
  • 是一种易于使用的语言,可让您的程序轻松运行。这使得Python非常适合原型开发和其他临时编程任务,而不会影响可维护性。
  • 附带一个大型标准库,支持许多常见的编程任务,例如连接到Web服务器、使用正则表达式搜索文本、读取和修改文件。
  • Python的交互模式可以轻松测试短代码片段。还有一个称为IDLE的捆绑开发环境。
  • 通过添加以编译语言(如C或C++)实现的新模块,可以轻松扩展。
  • 也可以嵌入到应用程序中以提供可编程接口。
  • 可在任何地方运行,包括MacOSX、Windows、Linux和Unix,非官方版本也可用于Android和iOS。
  • 是两种意义上的自由软件。下载或使用Python或将其包含在您的应用程序中不需要任何费用。Python也可以自由修改和重新分发,因为虽然该语言受版权保护,但它可以在开源许可下使用。

b. 安装Python For Windows(官网,可选)

https://www.python.org/downloads/windows/

安装时记得勾选"Add Python 3.10 To PATH",它会在安装后帮我们把Python工作目录加到系统变量中。

image

c. 安装Python For Windows(Winget,推荐)

安装Python 3.x系列

winget install 'Python.Python.3'

安装Python 2.x系列

winget install 'Python.Python.2'

image

目前QT要求Python 3.x的环境,所以这里我们安装3.x系列。

image

d. 安装Python For Windows(MsStore,可选)

https://www.microsoft.com/store/productId/9PJPW5LDXLZ5

ms-windows-store://pdp/?productid=9PJPW5LDXLZ5

image

由于Microsoft Store应用程序的限制,Python脚本可能没有对共享位置(如TEMP和注册表)的完全写入权限。相反,它将写入私人副本。如果您的脚本必须修改共享位置,您将需要安装完整的安装程序。

e. 验证Python安装

不出意外的,通过检查用户的PATH我们发现,Python 3.x的安装运行目录已经被加入了,这很好,按道理命令行能正确识别它了。

image

python --version

image

6. 准备构建环境Gperf(必选)

https://www.gnu.org/software/gperf/

从一个密钥集生成一个完美的哈希函数

image

GNU gperf是一个完美的哈希函数发生器。对于一个给定的字符串列表,它以C或C++代码的形式产生一个哈希函数和哈希表,用于根据输入的字符串查询一个值。哈希函数是完美的,这意味着哈希表没有碰撞,而且哈希表的查找只需要进行单一的字符串比较。

GNU gperf是高度可定制的。它有生成C或C++代码的选项,可以发出开关语句或嵌套ifs而不是哈希表,还可以调整gperf采用的算法。

后续QtWebEngineQtPdf子模块的编译对它存在依赖。

a. 下载Gperf for Windows安装

http://gnuwin32.sourceforge.net/packages/gperf.htm

下载后解压得到Gperf相关文件,把它找到位置安放好。

image

通过系统的搜索功能直接搜索"环境变量"这个关键词,进入环境变量的设置界面。

image

把Gperf的所在的目录位置的bin路径加到系统环境变量的PATH里面即可。

C:\xxxxxx\gperf\bin

image

重新打开一次Windows终端,这时候就能识别gperf命令了。

gperf --version

image

7. 准备构建环境Bison(必选)

https://www.gnu.org/software/bison/

兼容Yacc的解析器生成器

Bison是一个通用的分析器生成器,它可以将一个有注释的上下文自由语法转换为采用LALR(1)分析器表的确定性LR或广义LR(GLR)分析器。作为一个实验性的功能,Bison还可以生成IELR(1)或规范的LR(1)分析器表。一旦你熟练掌握了Bison,你就可以用它来开发广泛的语言分析器,从用于简单的桌面计算器到复杂的编程语言。

Bison与Yacc是向上兼容的:所有正确编写的Yacc语法都可以在Bison中使用,而不会有任何改变。任何熟悉Yacc的人都应该能够使用Bison而不会有什么问题。你需要精通C或C++编程,才能使用Bison。作为一个实验性的功能,Java也被支持。

后续QtWebEngineQtPdf子模块的编译对它存在依赖。

a. 下载Bison for Windows安装

http://gnuwin32.sourceforge.net/packages/bison.htm

下载后解压得到Bison相关文件,把它找到位置安放好。

image

另外发现Bison运行依赖了libintl3.dlllibiconv2.dll这两个动态库,我们可以从网上下载并且放到bin目录下。

image

通过系统的搜索功能直接搜索"环境变量"这个关键词,进入环境变量的设置界面。

image

把Bison的所在的目录位置的bin路径加到系统环境变量的PATH里面即可。

C:\xxxxxx\bison\bin

image

重新打开一次Windows终端,这时候就能识别bison命令了。

bison --version

image

8. 准备构建环境Flex(必选)

https://www.gnu.org/software/flex/

快速词法分析器生成器

Flex是一个快速的词法分析器生成器。它是一个用于生成对文本进行模式匹配的程序的工具。Flex有很多应用,包括与GNU Bison一起编写编译器。Flex是众所周知的Lex程序的一个免费实现。它具有Lex兼容模式,还提供了一些新的功能,如排他性启动条件。

后续QtWebEngineQtPdf子模块的编译对它存在依赖。

a. 下载Flex for Windows安装

http://gnuwin32.sourceforge.net/packages/flex.htm

下载后解压得到Flex相关文件,把它找到位置安放好。

image

通过系统的搜索功能直接搜索"环境变量"这个关键词,进入环境变量的设置界面。

image

把Flex的所在的目录位置的bin路径加到系统环境变量的PATH里面即可。

C:\xxxxxx\flex\bin

image

重新打开一次Windows终端,这时候就能识别flex命令了。

flex --version

image

9. 准备构建环境OpenSSL(必选)

http://slproweb.com/products/Win32OpenSSL.html

Win32/Win64 OpenSSL安装项目致力于为微软Windows提供一个简单的OpenSSL安装。通过简单、有效的安装程序,它很容易设置,也很容易使用。不需要编译任何东西,也不需要跳过任何圈套,只要点击几次就可以安装,让你去做真正的工作。今天就下载吧! 请注意,这些是OpenSSL的默认构建,并受当地和州法律的约束。更多信息可以在安装的法律协议中找到。

法律声明:本产品包括由OpenSSL项目开发的用于OpenSSL工具包的软件。

a. 下载Win64 OpenSSL安装

b. 安装Win64 OpenSSL(Winget)

可以通过搜索OpenSSL找到可用的安装包。

winget search OpenSSL

image

通过Winget执行安装

winget install ShiningLight.OpenSSL

image

c. 验证OpenSSL安装

openssl version

image

10. 准备构建环境NodeJS(必选)

https://nodejs.org

image

Node.js是一个开源的、跨平台的、后端的JavaScript运行环境,在V8引擎上运行,在网络浏览器之外执行JavaScript代码。Node.js让开发者使用JavaScript编写命令行工具,并用于服务器端脚本--在页面被发送到用户的网络浏览器之前,在服务器端运行脚本以产生动态网页内容。因此,Node.js代表了一种 "到处都是JavaScript "的范式,围绕一种单一的编程语言统一网络应用开发,而不是为服务器端和客户端的脚本提供不同的语言。

Node.js有一个事件驱动的架构,能够进行异步I/O。这些设计选择旨在优化具有许多输入/输出操作的网络应用的吞吐量和可扩展性,以及实时网络应用(例如,实时通信程序和浏览器游戏)。

a. 下载NodeJS安装

b. 安装NodeJS(Winget)

可以通过搜索NodeJS找到可用的安装包。

winget search NodeJS

image

通过Winget执行安装

winget install OpenJS.NodeJS.LTS

image

c. 验证NodeJS安装

node --version

image

11. 准备编译环境MSVC(必选)

a. 什么是MSVC

MSVC 的英文全称是Microsoft Visual C++,它是由微软出品的针对C++ Standard(STD)实现的编译工具集。

目前针对C++ 17的标准,MSVC已经全部实现,而GCC有一项未实现,针对更新版本C++ 20/23的实现,MSVC也是保持领先的,综合来说,它是C++编译器的首选。

image

使用MSVC来编译并不会破坏和影响C++程序的跨平台体验,因为它是根据C++ STD的标准来实现的,只要Linux和Mac等非Windows平台也是根据此标准来实现,就可以做到跨平台支持。

关于C++标准库和std命名空间的故事可参阅:C++标准库和std命名空间

b. 安装MSVC(官网)

https://docs.microsoft.com/zh-cn/cpp/windows/latest-supported-vc-redist?view=msvc-170

注意:高版本的MSVC并不能向下兼容,目前只有一个特例就是MSVC 2017可以兼容MSVC 2015,也就是说装了MSVC 2017就不用装MSVC 2015,但是其他版本没法例外,需要的话都得装,而且可以共存

还可以通过安装Microsoft Visual C++ Build Tools里面会包含MSVC组件。

注意:虽然你可能已经是X64的系统了,但是不意味着你只需要安装X64版本的MSVC就可以高枕无忧了,实际上还是会有软件采用X86架构来写,所以X86的MSVC也要装上

image

c. 安装MSVC(Winget)

我们来搜索一下Microsoft Visual C++这个关键词就知道有多少个版本可以安装了。

winget search 'Microsoft Visual C++'
名称 ID 版本
Microsoft Visual C++ 2005 Redistributable Microsoft.VC++2005Redist-x86 8.0.61001 winget
Microsoft Visual C++ 2005 Redistributable (x64) Microsoft.VC++2005Redist-x64 8.0.61000 winget
Microsoft Visual C++ 2008 Redistributable - x86 Microsoft.VC++2008Redist-x86 9.0.30729.6161 winget
Microsoft Visual C++ 2008 Redistributable - x64 Microsoft.VC++2008Redist-x64 9.0.30729.6161 winget
Microsoft Visual C++ 2010 x86 Redistributable Microsoft.VC++2010Redist-x86 10.0.40219 winget
Microsoft Visual C++ 2010 x64 Redistributable Microsoft.VC++2010Redist-x64 10.0.40219 winget
Microsoft Visual C++ 2012 Redistributable (x86) Microsoft.VC++2012Redist-x86 11.0.61030.0 winget
Microsoft Visual C++ 2012 Redistributable (x64) Microsoft.VC++2012Redist-x64 11.0.61030.0 winget
Microsoft Visual C++ 2013 Redistributable (x86) Microsoft.VC++2013Redist-x86 12.0.40664.0 winget
Microsoft Visual C++ 2013 Redistributable (x64) Microsoft.VC++2013Redist-x64 12.0.40664.0 winget
Microsoft Visual C++ 2017 Redistributable (x86) Microsoft.VC++2017Redist-x86 14.20.27404.0 winget
Microsoft Visual C++ 2017 Redistributable (x64) Microsoft.VC++2017Redist-x64 14.20.27404.0 winget
Microsoft Visual C++ 2015 Redistributable (x86) Microsoft.VC++2015Redist-x86 14.0.24516.0 winget
Microsoft Visual C++ 2015 Redistributable (x64) Microsoft.VC++2015Redist-x64 14.0.24516.0 winget
Microsoft Visual C++ 2015-2019 Redistributable (x86) Microsoft.VC++2015-2019Redist-x86 14.29.30135.0 winget
Microsoft Visual C++ 2015-2019 Redistributable (x64) Microsoft.VC++2015-2019Redist-x64 14.29.30135.0 winget
Microsoft Visual C++ 2015-2022 Redistributable (x64) Microsoft.VC++2015-2022Redist-x64 14.31.30919.0 winget
Microsoft Visual C++ 2015-2022 Redistributable (x86) Microsoft.VC++2015-2022Redist-x86 14.31.30919.0 winget
Microsoft Visual C++ 2019 Redistributable (Arm64) Microsoft.VC++2019Redist-arm64 14.29.30139.0 winget
Microsoft Visual C++ 2022 Redistributable (Arm64) Microsoft.VC++2022Redist-arm64 14.31.30919.0 winget

那我们就可以根据自己想要的包的Id来安装了,打个比如:

winget install 'Microsoft.VC++2015-2022Redist-x64'

image

winget install 'Microsoft.VC++2015-2022Redist-x86'

image

d. 验证MSVC安装(Winget)

我们来检索一下Microsoft Visual C++这个关键词就知道有多少个版本可以安装了。

winget list 'Microsoft Visual C++'

image

e. 验证MSVC安装(系统设置)

也可以通过Windows 10/11系统设置中的"应用和功能"清单列表,搜索关键词Microsoft Visual C++可以看到已安装的版本。

image

12. 准备编译环境MingGW(可选)

a. 什么是MingGW/MinGW-w64

https://mingw.osdn.io

image

GCC官网提供的GCC编译器是无法直接安装到Windows平台上的,如果我们想在Windows平台使用GCC编译器,可以安装GCC的移植版本,目前适用于Windows平台、受欢迎的GCC移植版主要有2种,分别为MinGWCygwin。其中,MinGW侧重于服务Windows用户可以使用GCC编译环境,直接生成可运行Windows平台上的可执行程序,相比后者体积更小,使用更方便;而Cygwin则可以提供一个完整的Linux环境,借助它不仅可以在Windows平台上使用GCC编译器,理论上可以运行Linux平台上所有的程序。

MingGW 的英文全称是Minimalist GNU on Windows,它是一个可自由使用和自由发布的Windows特定头文件和使用GNU工具集导入库的集合,允许你在GNU/Linux和Windows平台生成本地的Windows程序而不需要第三方运行时库,它是GNU Compiler Collection(GCC)的原生Windows端口。

MinGW-w64,是基于Linux下的GCC把它移植到Windows平台下的产物。MinGW可以在Windows平台下把C源文件编译成.exe应用程序,但是它有一个缺点,那就是不能把源文件编译成64位的,于是MinGW出现了一个分支,那就是MinGW-w64(现已独立发展)。顾名思义,就是可以编译64位的。如今MinGW早已停止更新,官方的Windows版本更新日期永远停留在了2017年。由于仅有MinGW-w64被GCC官方所支持,而MinGW早已停止更新,所以更推荐用MinGW-w64

b. 安装MingGW(官网)

https://osdn.net/projects/mingw/

image

image

image

然后点击Continue按钮,我们会打开一个MinGW Installer Manager的程序界面。

接下来,我们要选择mingw32-base-bin代表对编译C语言的支持,mingw32-gcc-g++-bin代表对编译C++语言的支持。

image

然后通过菜单栏的Installation项点击Apply Changes按钮。

image

点击Apply按你确定刚才的两个变更。

image

进入实际的拉取和安装流程。

image

期间需要耐心等待,直到安装完毕,如果有因网络原因拉取失败的,可以回到安装界面的All Packages手动指定安装即可。

最后我们还需要把MingGW所在的Bin目录加到系统变量的PATH中去。

image

c. 安装MingGW-w64(官网)

https://www.mingw-w64.org

image

image

image

或者通过安装Win-builds来附带MingGW-w64

image

d. 验证MingGW安装

gcc --version

image

13. 准备编译环境Clang(可选)

a. 什么是LLVM

LLVM最早是底层虚拟机(Low Level Virtual Machine)的缩写,但由于项目发展过快,底层虚拟机已经不足以介绍项目本身,而它已经发展成为一个包含前端,优化器和后端的完整编译框架,并且全称就叫LLVM,并非任何英文的简称了。其主要由C++编写而成。

image

LLVM最大的优势就在于三端(前端、优化器、后端)分离,所以如果我们想编写一门独立的语言,只需要编写相应的前端就可以兼容各大终端设备。如果以后多了一种终端设备,我们也只需要编写一次后端,就可以兼容各大语言。

b. 什么是Clang

Clang是一个由Apple主导编写,基于LLVM的C/C++/Objective-C编译器前端,属于LLVM项目的一个子项目。

https://clang.llvm.org

image

Clang是一个C++编写、基于LLVM、发布于LLVM BSD许可证下的C/C++/Objective-C/Objective-C++编译器。它与GNU C语言规范几乎完全兼容。

在GCC前提下如何诞生Clang?

Apple早年从GCC切换到LLVM的时候,开始用的是基于GCC库写的一套LLVM前端,但由于Apple对代码优化的要求更高,而GCC官方又迟迟不肯对针对性的更新,所以衍生出GCC的一套分支LLVM-GCC,由Apple自己维护,导致Apple使用的GCC版本远低于官方版本,最后由于GCC的开源协议改变,让Apple彻底抛弃GCC转而投向自研的Clang。

相比于GCC,Clang具有如下优点:

  • 编译速度快:在某些平台上,Clang的编译速度显著的快过GCC(Debug模式下编译OC速度比GGC快3倍)
  • 占用内存小:Clang生成的AST所占用的内存是GCC的五分之一左右
  • 模块化设计:Clang采用基于库的模块化设计,易于IDE集成及其他用途的重用
  • 诊断信息可读性强:在编译过程中,Clang创建并保留了大量详细的元数据(metadata),有利于调试和错误报告
  • 设计清晰简单,容易理解,易于扩展增强

c. 为什么要Clang

如果你要编译QT文档(QDoc),那么需要使用Clang来进行编译。

d. 安装QT所需的Clang(推荐)

https://download.qt.io/development_releases/prebuilt/libclang/qt/

由QT提供的Clang预编译版本包含了Clang官方预编译版本中所不包含,但是QDoc依赖的相关组件。

如果将Clang安装在一个自定义的目录,那么需要将Clang的位置告诉CMake,方法是通过在在环境变量中添加名为CMAKE_PREFIX_PATH的变量。

e. 安装LLVM官网的Clang(可选)

https://releases.llvm.org/download.html

直接通过LLVM官网的预编译页面就可以下载和安装Clang,Clang被包含在LLVM整体包中,所以只需要安装对应的LLVM版本即可。

或者通过Winget安装

winget install 'LLVM.LLVM'

image

f. 添加Clang到系统环境变量PATH

因为我们下载的是QT提供的Clang预编译包。

g. 验证Clang安装

clang --version

image

14. 检查环境变量并生成配置(必选)

1. 检查环境变量(可选)

我们建议创建一个桌面链接,打开一个命令提示符,其环境设置类似于Visual Studio提供的命令提示符菜单项。这是通过创建一个应用程序链接,将设置环境的.cmd文件和命令行选项/k(保持开放)传递给cmd.exe来实现的。

假设该文件名为qt6vars.cmd,Qt文件夹名为C:\Qt\6.2.3\Src

REM Set up Microsoft Visual Studio 2019, where <arch> is amd64, x86, etc.
CALL "C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\Build\vcvarsall.bat" <arch>
SET _ROOT=C:\Qt\6.2.3\Src
SET PATH=%_ROOT%\qtbase\bin;%PATH%
SET _ROOT=

然后可以通过指定%SystemRoot%\system32\cmd.exe /E:ON /V:ON /k C:\Qt\qt6vars.cmd作为应用程序来创建一个桌面链接。

根据你的个人设置,你可能还需要让CMakeNinjaPerlPython的安装目录成为上述SET %PATH%行的一部分。

MinGW的设置是类似的;它们的不同之处在于,应将安装的bin文件夹添加到路径中,而不是调用Visual Studio设置脚本。对于MinGW,请确保在路径中找不到sh.exe,因为它影响到mingw32-make

实践配置文件:C:\Qt\qt6.2.3vars.cmd

REM Set up Microsoft Visual Studio 2022, where <arch> is amd64, x86, etc.
CALL "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" amd64

set "CMAKE_ROOT=C:\Program Files\CMake\bin"
set "NINJA_ROOT=C:\Qt\Tool\ninja"
set "PERL_ROOT=C:\Strawberry\perl\bin"
set "PYTHON_ROOT=C:\Users\TaylorShi\AppData\Local\Programs\Python\Python310\"

SET _ROOT=C:\Qt\6.2.3\Src

set PATH=%CMAKE_ROOT%;%PATH%
set PATH=%NINJA_ROOT%;%PATH%
set PATH=%PERL_ROOT%;%PATH%
set PATH=%PYTHON_ROOT%;%PATH%

rem Check if the tools are in PATH
where perl.exe
where python.exe
where cmake.exe
where ninja.exe

set "INSTALL_PATH=C:\Qt\6.2.3\Bin"

configure -prefix %INSTALL_PATH% -DQT_NO_EXCEPTIONS=1 -debug-and-release -force-debug-info -platform win32-msvc -opensource -confirm-license ^
-opengl es2 -I "C:\Program Files\OpenSSL-Win64\include" -L "C:\Program Files\OpenSSL-Win64\lib"

实践快捷方式:C:\Qt\配置QT v6.2.3.lnk

%SystemRoot%\system32\cmd.exe /E:ON /V:ON /k C:\Qt\qt6.2.3vars.cmd

2. 检查环境变量(推荐)

通过源码编译QT需要依赖CMakeNinjaPerlPython四大必备组件,以及GperfBisonFlex三大可选组件,我们可以通过终端命令来检查是否安装和设置到位,如果存在缺失,根据前面的指引安装和设置好即可。

  • 检查CMake组件
cmake --version

image

  • 检查Ninja组件
ninja --version

image

  • 检查Perl组件
perl --version

image

  • 检查Python组件
python --version

image

  • 检查Gperf组件
gperf --version

image

  • 检查Bison组件
bison --version

image

  • 检查Flex组件
flex --version

image

3. 生成编译配置(可选)

要为你的机器类型配置Qt库,运行源目录下的configure.bat脚本。

默认情况下,Qt被配置为安装在C:\Program Files\Qt目录下,但这可以通过使用-prefix选项来改变。

配置选项(Configure Options)页面包含了更多关于配置选项的信息。关于图形加速的具体选项,请参阅Qt for Windows - Graphics Acceleration

4. 生成编译配置(推荐)

通过系统的搜索功能直接搜索X64 Native这个关键词,找到x64 Native Tools Command Prompt for VS 2022,点击"以管理员身份运行"的选项启动终端。

image

输入如下命令,切换到前面存放解压后QT源码的目录:

cd C:\Qt\6.2.3\Src

image

通过触发Src目录下configure.bat文件来设定配置,可执行如下命令:

  • 方案一(暂时未成功)
configure -prefix 'C:\Qt\6.2.3\Bin' -debug-and-release -opensource -confirm-license
  • 方案二(跳过qtwebengine)
configure -prefix 'C:\Qt\6.2.3\Bin' -skip qtwebengine -debug-and-release -opensource -confirm-license
  • 方案三(暂时未成功)
configure -prefix 'C:\Qt\6.2.3\Bin' -DQT_NO_EXCEPTIONS=1 -debug-and-release -force-debug-info -platform win32-msvc -opensource -confirm-license -opengl es2 -I "C:\Program Files\OpenSSL-Win64\include" -L "C:\Program Files\OpenSSL-Win64\lib"
  • -prefix,指定构建目录,是编译完成后,头文件和库文件的输出路径,建议这里的文件夹名全英文。
  • -debug-and-release,同时生成release发布版和生成release发布版。
  • -opensource,指代编译开源版本,相对的是-commercial,指代编译商业版本。
  • -confirm-license,指代确认许可协议。

其他可选参数包括:

  • -skip,指代跳过编译指定的子模块,例如-skip qtwebengine,跳过编译qtwebengine模块。
  • -shared,指代生成动态库,默认设置。
  • -static,指代生成静态库,例如-static,为生成静态库模式。
  • -nomake,指代跳过不编译输出的子文件夹。
  • QT_NO_EXCEPTIONS,指代关闭QT异常。
  • -force-debug-info,指代为Release版本创建符号信息。
  • -platform win32-msvc,指代编译平台为win32-msvc平台,环境为Win32,编译器为MSVC。
  • -opengl es2,指代支持ES2 API的OpenGL。
  • -no-compile-examples,指代不构建示例项目,但是保留源码。
  • -mp,指代为了提高编译速度,多核多线程编译。
  • -qt-sqlite -qt-pcre -qt-zlib -qt-libpng -qt-libjpeg -qt-freetype -qt-harfbuzz,指代追加连带构建的第三方库。

image

不到一会就完成了,看到相关提示。

image

Src的目录下,我们会看到根目录和子模块的目录下都新增了一个CMakeFiles文件夹,这便是配置后的相关文件。

image

如果要重新生成配置文件,应该搜索在Src目录搜索CMakeFiles文件夹,全部删除即可重来,并删除根目录的文件CMakeCache.txt

image

适用于QT v5.15.2的命令行:

configure -prefix 'C:\Qt\5.15.2\Bin' -debug-and-release -opensource -confirm-license

15. 通过CMake/Ninja/NMake构建Qt库(必选)

a. 通过CMake构建Qt For Windows库(可选)

cmake --build . --parallel

image

b. 通过Ninja构建Qt For Windows库(推荐)

ninja -j$CpuThreadCount

其中$CpuThreadCount是CPU线程数,通过"开始菜单"-"右键"-"任务管理器"-"性能"-"CPU"-"逻辑处理器",即可看到当前最高支持的CPU线程数。

image

例如执行命令:

ninja -j12

image

经历失败,多次卡在QtWebEngineCore这里过不去。

FAILED: qtwebengine/src/core/Debug/AMD64/QtWebEngineCore.stamp qtwebengine/src/core/Debug/AMD64/QtWebEngineCore C:/Qt/6.2.3/Src/qtwebengine/src/core/Debug/AMD64/QtWebEngineCore.stamp C:/Qt/6.2.3/Src/qtwebengine/src/core/Debug/AMD64/QtWebEngineCore
cmd.exe /C "cd /D C:\Qt\6.2.3\Src\qtwebengine\src\core && C:\Qt\Tool\ninja\ninja.exe -C C:/Qt/6.2.3/Src/qtwebengine/src/core/Debug/AMD64 QtWebEngineCore"
ninja: build stopped: subcommand failed.

image

准备跳过QtWebEngine重试!

image

切换到方案二,成功了。

c. 通过NMake编译和安装Qt For Windows v5.15.2(可选)

适用于QT v5.15.2,因为5系列还不支持CMake

nmake

一步到位

nmake && nmake install

image

image

16. 通过CMake/Ninja/NMake安装Qt(必选)

a. 通过CMake安装Qt For Windows(可选)

cmake --install . --prefix $TargetInstallDir

其中--prefix是可选参数,用于指定QT的安装目录

例如执行命令:

cmake --install . --prefix 'C:\Qt\6.2.3\Install'

b. 通过Ninja安装Qt For Windows(推荐)

ninja install

image

执行后,它会把Src目录中生成的文件更新到我们指定的Bin目录中来。

image

image

这时候,如果需要节约空间,我们就可以把整个Src目录删了即可。

c. 通过NMake安装Qt For Windows v5.15.2(可选)

适用于QT v5.15.2,因为5系列还不支持CMake

nmake install

参考

posted @ 2021-11-10 12:49  TaylorShi  阅读(2164)  评论(2编辑  收藏  举报