源码编译Qt 5.15.9+msvc2019

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

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

归纳总结如下:

准备阶段

Qt for Windows - Requirements

  • 安装python,我这里用的是anaconda python 3.11,要求2.7以上,你也可以直接去官网下载:https://www.python.org/downloads/

  • 安装perl,我这里安装的是strawberry-perl-5.32.1.1-64bit.msi,要求5.12以上,下载地址:https://strawberryperl.com/releases.html

  • 安装ruby(可选),ruby是为了编译WebKit,如果不编译该模块应该就不需要了(我没有测试)。我这里安装的是rubyinstaller-3.2.2-1-x64.exe,下载地址:https://rubyinstaller.org/2023/04/01/rubyinstaller-3.2.2-1-3.1.4-1-3.0.6-1-and-2.7.8-1-released.html

  • 安装clang(可选),编译qtdoc时需要,影响Qt Assistant里的参考文档,如果编译了就可以在qt designer的帮助里查看参考文档。我这里安装的是LLVM-11.0.0-win64.exe,其实qt官网有给出vs2019的版本libclang-release_140-based-windows-vs2019_64,下载地址:https://download.qt.io/development_releases/prebuilt/libclang/

  • 安装openssl(可选),编译Qt Network时需要,为了支持 Secure Sockets Layer (SSL) 。我这里是下载源码自己编译(教程),openssl-1.1.1w.tar.gz,下载地址:https://www.openssl.org/source/

  • 安装ICU(可选),也是编译WebKit时需要,为了UNICODE和Localization ,因为我没有用到,就没有研究它了

  • 安装jom(可选),qt提供的一个工具,可以实现并行编译,提高编译速度。我这里安装的是jom_1_1_4.zip,官网经常打不开,可以到镜像源去下载https://mirrors.tuna.tsinghua.edu.cn/qt/official_releases/jom/

  • 下载Qt源码,官网经常打不开,可以到镜像源去下载 qt-everywhere-opensource-src-5.15.9.zip

把上述东西都安装在英文路径下,注意目录名称尽量简短且不能带有空格,检查系统环境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 toolsOptimize release build for size ........ noBuilding shared libraries .............. yesUsing C standard ....................... C89Using C++ standard ..................... C++17Relocatable ............................ yesUsing precompiled headers .............. yesUsing LTCG ............................. noTarget compiler supports:SSE .................................. SSE2 SSE3 SSSE3 SSE4.1 SSE4.2AVX .................................. AVX AVX2AVX512 ............................... F ER CD PF DQ BW VL IFMA VBMIOther x86 ............................ AES F16C RDRAND SHABuild parts ............................ libs examples toolsApp store compliance ................... no
Qt modules and options:Qt Concurrent .......................... yesQt D-Bus ............................... yesQt D-Bus directly linked to libdbus .... noQt Gui ................................. yesQt Network ............................. yesQt Sql ................................. yesQt Testlib ............................. yesQt Widgets ............................. yesQt 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 ................................... noWARNING: 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.
...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/82980.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[npm]package.json文件

[npm]package.json文件 生成 package.jsonpackage.json 必须属性nameversion 描述信息descriptionkeywordsauthorcontributorshomepagerepositorybugs 依赖配置dependenciesdevDependenciespeerDependenciesoptionalDependenciesbundledDependenciesengines 脚本配置scriptscon…

无涯教程-JavaScript - PI函数

描述 PI函数返回数字3.14159265358979,数学常数pi,精确到15位数字。 语法 PI ()争论 PI函数语法没有参数。 适用性 Excel 2007,Excel 2010,Excel 2013,Excel 2016 Example JavaScript 中的 PI函数 - 无涯教程网无涯教程网提供描述PI函数返回数字3.14159265358979,数学常…

半导体划片机工艺应用

半导体划片工艺是半导体制造过程中的重要步骤之一,主要用于将大尺寸的晶圆切割成小片,以便进行后续的制造和封装过程。以下是一些半导体划片工艺的应用: 晶圆划片:在半导体制造过程中,需要将大尺寸的晶圆切割成小片&am…

虚拟机(VMM)

一、虚拟机概念 虚拟机又名虚拟机管理程序、虚拟机监控程序、VMM 使用虚拟化技术,将一台物理机器虚拟化为多台虚拟机器,每台虚拟机器都可以独立一个操作系统。 传统的计算机,一台物理机器只能运行一个操作系统。 二、虚拟机的分类 第一类VMM&…

【Linux 服务器运维】定时任务 crontab 详解 | 文末送书

文章目录 前言一、crontab 介绍1.1 什么是 crontab1.2 crontab 命令工作流程1.3 Linux 定时任务分类 二、crontab 用法详解2.1 crond 服务安装2.2 crontab 文件内容分析2.3 crontab 命令用法2.3.1 查看定时任务列表2.3.2 编辑/创建定时任务2.3.3 删除定时任务2.3.4 其他 cronta…

微服务07-认识MQ+RabbitMQ入门

1.前言 了解同步调用和异步调用 1.1.同步调用 比如这里的支付服务,需要等待订单服务、短信服务…执行完毕才能执行,这样支付整个流程完毕需要500ms 然后如果订单、仓储等其中一个服务挂掉了,那么支付服务请求请求不了,挂掉的服…

typescrip接口 interface详解,以及ts实现多态

ts 接口 当一个对象类型被多次使用时,一般会使用接口(interface)来描述对象的类型,达到复用的目的 示例如下 当一个对象类型被多次使用时,可以看到,很明显代码有大量的冗余 let personTom: { name: string, age?: number, sayHi(name: string): void } {name: Tom,sayHi(n…

JVM G1垃圾回收器学习笔记

前言 最近在工作中遇到频繁FullGC且YoungGC时间有时特别长的情况,而自己对JVM的垃圾回收也是一知半解,因此需要对JVM做系统的了解,为快速解决工作中的问题,能有效分析GC日志和业务代码,先从G1垃圾回收器开始学习&…

【操作系统笔记】程序运行机制CPU指令集

内存地址 指针 / 引用 指针、引用本质上就是内存地址,有了内存地址就可以操作对应的内存数据了。 不同的数据类型 字节序 大端序(Big Endian):字节顺序从低地址到高地址顺序存储的字节序小端序(Little Endian&#…

Spring Boot2.7生成用于登录的图片验证码

先在 pom.xml 注入依赖 <dependency><groupId>com.github.penggle</groupId><artifactId>kaptcha</artifactId><version>2.3.2</version> </dependency>然后 需要在配置文件中声明一下DefaultKaptcha 的 bean对象 然后 我们…

76、SpringBoot 整合 MyBatis------使用 sqlSession 作为 Dao 组件(就是ssm那一套,在 xml 写sql)

就是 ssm 那套&#xff0c;在xml 上面写sql ★ 基于SqlSession来实现DAO组件的方式 - MyBatis提供的Starter会自动在Spring容器中配置SqlSession&#xff08;其实SqlSessionTemplate实现类&#xff09;、并将它注入其他组件&#xff08;如DAO组件&#xff09;- DAO组件可直接…

js-nginx配置字段适配前端服务

当我们有这样一个需求&#xff0c;前端同一套代码&#xff0c;但要根据一些特殊字段展示不同的内容&#xff0c;比如我们有一个场id&#xff0c;暂时这个场id放在前端&#xff0c;后端根据这个场id返回不同的数据&#xff0c;这里前端部署用的是yaml文件&#xff0c;平台是ranc…

如何使用Python构建OTP验证系统?

即使您的密码被盗&#xff0c;OTP验证系统也可以充当安全的关键要素。它让您无需记住密码&#xff0c;充当额外的安全层&#xff0c;并降低了网络钓鱼的风险。 不妨学习用Python建立一个OTP验证系统&#xff0c;它会向您的手机号码发送一个OTP&#xff0c;有效期只有两分钟&am…

linux 文件锁

建议锁,强制锁,记录锁的概念 建议锁&#xff1a; 如果某一个进程对一个文件持有一把锁之后&#xff0c;其他进程仍然可以直接对文件进行操作(open, read, write)而不会被系统禁止&#xff0c;即使这个进程没有持有锁。只是一种编程上的约定。建议锁只对遵守建议锁准则的进程生…

知识付费平台开发技术实践:构建数字学习的未来

引言 知识付费平台的兴起正在塑造着数字学习的未来。本文将介绍一些关键的技术实践&#xff0c;帮助开发者构建强大的知识付费平台&#xff0c;提供出色的数字学习体验。 1. 选择适当的技术栈 在开始知识付费平台的开发之前&#xff0c;首要任务是选择适当的技术栈。这包括…

TS中的数据类型

一、number类型 let c: number; c 10; c "hello"; // 不能复制string类型 二、string类型 let d: string; d "hello"; d 10; // 不能复制number类型 三、boolean类型 let e: boolean true; e false; e 10; // 不能赋值true和false以外的值 四…

嵌入式裸机轻量级架构探索总结

为什么会想着探索下嵌入式裸机的架构呢&#xff1f;是因为最近写了一个项目&#xff0c;项目开发接近尾声时&#xff0c;发现了一些问题&#xff1a; 1、项目中&#xff0c;驱动层和应用层掺杂在一起&#xff0c;虽然大部分是应用层调用驱动层&#xff0c;但是也存在驱动层调用…

笔试面试相关记录(4)

&#xff08;1&#xff09;实现防火墙的主流技术有哪些&#xff1f; 实施防火墙主要采用哪些技术 - 服务器 - 亿速云 (yisu.com) &#xff08;2&#xff09; char arr[][2] {a, b, c, d}; printf("%d", *(arr1)); 输出的是谁的地址&#xff1f;字符c 测试代码如下…

ThreeJS-3D教学一基础场景创建

Three.js 是一个开源的 JS 3D 图形库&#xff0c;用于创建和展示高性能、交互式的 3D 图形场景。它建立在 WebGL 技术之上&#xff0c;并提供了丰富的功能和工具&#xff0c;使开发者可以轻松地构建令人惊叹的 3D 可视化效果。 Three.js 提供了一套完整的工具和 API&#xff0…

JUC中创建的组件 多线程使用“哈希表”

JUC中创建的组件 JUC中创建的组件这些内容都不太常用&#xff0c;偶尔用到面试的时候&#xff0c;偶尔用到&#xff01;到时候自行查找即可&#xff0c;本文主要来快速的过一下&#xff0c;留个印象即可~ JUC&#xff08;java.util.concurrent&#xff09;和多线程相关的工具…