源码编译Qt 5.15.9+msvc2019

2023-09-18 13:59:59

官方文档里给出了详细步骤:
Building Qt Sources
Building Qt 5 from Git (Wiki)

注:本文基于windows11+vs2019x64+qt5.15.9,不编译Qt WebEngine

归纳总结如下:

准备阶段

Qt for Windows - Requirements

把上述东西都安装在英文路径下,注意目录名称尽量简短且不能带有空格,检查系统环境PATH,确保环境都设置好了,我的设置如下:

E:\qt-everywhere-src-5.15.9\gnuwin32\bin
E:\qt-everywhere-src-5.15.9\qtbase\bin
E:\anaconda3
C:\Strawberry\c\bin
C:\Strawberry\perl\site\bin
C:\Strawberry\perl\bin
E:\Ruby\bin
E:\jom

其中,
E:\qt-everywhere-src-5.15.9是qt源码目录
E:\anaconda3是python目录,
在这里插入图片描述

编译阶段

1、在开始里找到x64 Native Tools Command Prompt for VS 2019,以管理员权限运行
在这里插入图片描述
2、转到Qt源码目录

E:
cd E:\qt-everywhere-src-5.15.9

3、配置

注:每次configure要基于干净的源码目录,如果此前configure过,要先执行jom distclean(或nmake distclean),实测非常耗时,还不如直接删掉源码目录重新解压

set LLVM_INSTALL_DIR=E:\LLVM
configure -prefix "E:\Qt\5.15.9\msvc2019_64" -shared -debug-and-release -verbose -nomake tests -skip qtwebengine -opensource -confirm-license -opengl dynamic -openssl-runtime OPENSSL_INCDIR="D:\openssl\vc16_x64\include"

其中,
set LLVM_INSTALL_DIR=E:\LLVM是设置LLVM的环境,如果没有指定将无法编译qtdoc模块,只有要编译qtdoc才需要这句
在这里插入图片描述
configure -help可以查看configure的参数说明,此处仅给出上面用到的参数

-prefix "E:\Qt\5.15.9\msvc2019_64"   安装路径,执行install后将会输出到该路径
-shared 生成动态链接库,相应地,-static就是静态库,如果都不指定,默认是-shared
-debug-and-release 生成debug和release两个版本的库,也可以单独指定其中一种,-debug或-release,如果都不指定,默认是-release
-verbose 在configure过程中打印详细信息,方便排查问题
-nomake tests 默认生成以下几部分(part):libs、examples、tools、tests,这里就是告诉编译器不要生成tests这个part
-skip qtwebengine 跳过某个模块,这里不编译qtwebengine,它将非常耗时
-opensource 代表我们编译的是开源版本,相应地,-commercial代表商业许可的版本
-confirm-license 自动确认许可
-opengl dynamic 动态加载图形驱动,官方推荐采用该方式,具体看"Qt for Windows - Requirements""Graphics Drivers"一节
-openssl-runtime OPENSSL_INCDIR="D:\openssl\vc16_x64\include" 设置openssl,也可以不填该参数,我这里是动态链接的方式,一共有动态链接显示加载、动态链接隐式加载、静态库3种方式,具体见"Qt for Windows - Requirements""Libraries"一节

configure完成后,它会打印每个模块的情况,也可以到源码目录下的config.summary文件中查看

Build type: win32-msvc (x86_64, CPU features: sse sse2)
Compiler: msvc 192930152
Configuration: sse2 aesni sse3 ssse3 sse4_1 sse4_2 avx avx2 avx512f avx512bw avx512cd avx512dq avx512er avx512ifma avx512pf avx512vbmi avx512vl compile_examples f16c largefile precompile_header rdrnd rdseed shani x86SimdAlways shared shared debug_and_release release debug build_all c++11 c++14 c++17 c++1z concurrent dbus no-pkg-config release_tools stl
Build options:
  Mode ................................... debug and release; default link: debug; optimized tools
  Optimize release build for size ........ no
  Building shared libraries .............. yes
  Using C standard ....................... C89
  Using C++ standard ..................... C++17
  Relocatable ............................ yes
  Using precompiled headers .............. yes
  Using LTCG ............................. no
  Target compiler supports:
    SSE .................................. SSE2 SSE3 SSSE3 SSE4.1 SSE4.2
    AVX .................................. AVX AVX2
    AVX512 ............................... F ER CD PF DQ BW VL IFMA VBMI
    Other x86 ............................ AES F16C RDRAND SHA
  Build parts ............................ libs examples tools
  App store compliance ................... no
Qt modules and options:
  Qt Concurrent .......................... yes
  Qt D-Bus ............................... yes
  Qt D-Bus directly linked to libdbus .... no
  Qt Gui ................................. yes
  Qt Network ............................. yes
  Qt Sql ................................. yes
  Qt Testlib ............................. yes
  Qt Widgets ............................. yes
  Qt Xml ................................. yes
  ...

4、编译

jom -j20

后面的-j20代表线程数,因为我的CPU是i5-13500HX,14核20线程
当然也可以使用nmake指令。不管是用jom还是nmake,后续指令也要统一用对应的才行,否则会报错
编译过程的CPU占用率:
在这里插入图片描述
编译成功后是这样的
在这里插入图片描述

在我的机器(i5-13500HX + SSD PCIE4.0 7000MB/s)上的耗时 70分钟

5、安装

jom -j20 install

如果刚才是用nmake编译,这里要用nmake install
它会将编译好的文件拷贝至configure中-prefix指定的目录下
在我的机器耗时60分钟

6、编译参考文档

jom docs

如果刚才是用nmake编译,这里要用nmake docs

7、安装参考文档

jom install_docs

如果刚才是用nmake编译,这里要用nmake install_docs

实测中间卡在sqldriver的地方很久,ctrl+c跳过
安装成功后运行designer,打开“Qt设计师帮助”就可以看到参考文档,如果第3步中打印了如下信息,第6、7部都不会成功,“Qt设计师帮助”里的内容为空

Qt Tools:
  QDoc ................................... no
  
  WARNING: QDOC will not be compiled, probably because libclang could not be located. This means theat you cannot build the Qt ducomentation.
...
On Windows, you must set LLVN_INSTALL_DIR to the installation path.
...
更多推荐

保密资质申报条件

一、保密资格等级及认定机关:保密资格分两个级别;一级:可承担一级(绝密级、机密级、秘密级)科研生产任务;二级:可承担二级(机密级、秘密级)科研生产任务;一级保密认定:国家保密委员会(国家保密局、国防科工局、装备发展部)、国防科工局。二级保密资格认定:省保密委员会(省保密局、省国防科工办受理)。注:2021年6月3日,国

Unity中的简单数据存储办法

这段代码演示了Unity中的简单数据存储办法当涉及到不同类型的存储时,下面是一些示例代码来演示在Unity中如何使用不同的存储方法:1.临时存储示例代码(内存变量):```csharp//定义一个静态变量来存储临时计分publicstaticintscore=0;//在某个事件触发时更新计分publicvoidUpda

腾讯Behaviac Designer 和Unity连调行为树

1.克隆源码https://github.com/Tencent/behaviac/2.编译生成BehaviacDesigner.exe3.找到并打开BehaviacDesigner.exe(先不急着填弹出的路径workspace设置框)4.新建一个Unity空工程,并在此处下载behaviacunitypackage

论文解读 | 基于视觉的水果采摘机器人识别与定位方法研究进展

原创|文BFT机器人01背景在复杂的农业环境中,利用机器视觉及其相关算法可以提高收割机器人的效率、功能性、智能化和远程互动性。对于水果采摘机器人系统来说,主要的挑战包括免提导航和水果定位,以及大多数果园中常见的崎岖地形和大型障碍物。这些挑战会在移动采摘机器人穿越地形时在其视觉系统中引起严重的振动,因此需要采用动态目标跟

信息安全性测试的流程

安全测试一、信息安全性测试的定义软件安全是一个广泛而复杂的主题,每一个新软件都可能存在安全的缺陷,甚至这个缺陷是前所未见的。信息安全性测试的目的在于通过系统的测试,对所测软件提出安全改进建议,帮助用户将风险控制/转移/降低在国家安全标准允许或公众接受的许可范围内。二、信息安全性测试的作用(1)为信息系统安全验收出具报告

让Pegasus天马座开发板实现超声波测距

在完成《让Pegasus天马座开发板用上OLED屏》后,我觉得可以把超声波测距功能也在Pegasus天马座开发板上实现。于是在箱子里找到了,Grove-UltrasonicRanger这一超声波测传感器。官方地址:https://wiki.seeedstudio.com/Grove-Ultrasonic_Ranger超

zabbix介绍及部署(五十一)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档目录一、zabbix的基本概述二、zabbix的构成1、Server2、web页面3、数据库4、proxy5、Agent三、zabbix的监控对象四、zabbix的常用术语五、zabbix的工作流程六、zabbix进程详解七、zabbix的监控框架7.1三

Blender骨骼动画简明教程

Blender是首选的开源3D动画软件之一。令人惊讶的是,开始创建简单的角色动画并不需要太多时间。一旦获得最终的3D角色模型,你就可以使用该软件的众多动画功能和工具将其变为现实。推荐:用NSDT编辑器快速搭建可编程3D场景例如,Blender的绑定工具将帮助你实现角色所需的动作。还可以使用软件的姿势编辑功能添加和操作姿

【Vue】el 和 data短小精湛的细节!

hello,我是小索奇,精心制作的Vue教程持续更新哈,花费了大量的时间和精力,总结拓展了很多疑难点,想要学习&巩固&避坑就一起学习叭~el与data的两种写法el共有2种写法el表达式主要用来在模板中展示数据,它可以输出简单的变量值,也可以调用方法。语法是${表达式}创建Vue实例对象的时候配置el属性先创建Vue实

python学习--定义python中的类

创建类的语法类的组成类属性实例方法静态方法类方法classStudent:#Student为类的名称(类名)由一个或多个单词组成,每个单词首字母大写,其余小写native_place='吉林'#直接写在类的变量,称为类属性def_init_(self,name,age):self.name=name#self.name

zabbix自定义模板,邮件报警,代理服务器,自动发现与自动添加及snmp

1.自定义监控内容zabbix监控模板大全:www.zabbix.com/integration…监控案例1:登录人数检测需求:某公司确定已经安装好zabbix监控系统,限制某台服务器登录人数不超过3个,超过3个就发出报警信息。该服务器(192.168.73.114)已经添加至zabbix监控系统中具体步骤步骤一:在客

热文推荐