源码编译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.rhkb.cn/news/136540.html

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

相关文章

逼自己看完,Redis的事务你就掌握了!!!

目录 1、对于事务的理解 1.1、回顾MySQL的事务 1.2、Redis的事务 2、事务命令使用 3、watch的实现原理 3.1、watch用来干什么的? 3.2、watch的实现原理 1、对于事务的理解 1.1、回顾MySQL的事务 在MySQL中,事务有4个特性: 原子性&a…

MyBatis中当实体类中的属性名和表中的字段名不一样,怎么办

方法1: 在mybatis核心配置文件中指定,springboot加载mybatis核心配置文件 springboot项目的一个特点就是0配置,本来就省掉了mybatis的核心配置文件,现在又加回去算什么事,总之这种方式可行但没人这样用 具体操作&…

详细介绍如何微调 YOLOv8 姿势模型以进行动物姿势估计--附完整源码

动物姿势估计是计算机视觉的一个研究领域,是人工智能的一个子领域,专注于自动检测和分析图像或视频片段中动物的姿势和位置。目标是确定一只或多只动物身体部位的空间排列,例如头部、四肢和尾巴。这项技术具有广泛的应用,从研究动物行为和生物力学到野生动物保护和监测。 …

【LeetCode-中等题】107. 二叉树的层序遍历 II

文章目录 题目方法一:队列层序迭代 题目 方法一:队列层序迭代 解题详情:【LeetCode-中等题】102. 二叉树的层序遍历 res.add(0,zres); //效果是将 zres 列表作为 res 的第一个子列表,并将其它原本在第一位置及之后的子列表向后移…

Python项目开发:Flask基于Python的天气数据可视化平台

目录 步骤一:数据获取 步骤二:设置Flask应用程序 步骤三:处理用户输入和数据可视化 步骤四:渲染HTML模板 总结 在这个数字化时代,数据可视化已经成为我们理解和解释信息的重要手段。在这个项目中,我们…

JavaScript速成课—事件处理

目录 一.事件类型 1.窗口事件 2.表单元素事件 3.图像事件 4.键盘事件 5.鼠标事件 二.JavaScript事件处理的基本机制 三.绑定事件的方法 1.DOM元素绑定 2.JavaScript代码绑定事件 3.监听事件函数绑定 四.JavaScript事件的event对象 1.获取event对象 2.鼠标坐标获取…

下载HTMLTestRunner并修改

目录 一. 下载HTMLTestRunner 二. 修改HTMLTestRunner 1. 修改内容 2. 修改原因 一. 下载HTMLTestRunner 下载报告模板地址:http://tungwaiyip.info/software/HTMLTestRunner.html 下载模块: 二. 修改HTMLTestRunner 将修改后的模块放到python安装目录下的..…

Harmony 开始支持 Flutter ,聊聊 Harmony 和 Flutter 之间的因果

相信大家都已经听说过,明年的 Harmony Next 版本将正式剥离 AOSP 支持 ,基于这个话题我已经做过一期问题汇总 ,当时在现有 App 如何兼容 Harmony Next 问题上提到过: 华为内部也主导适配目前的主流跨平台方案,主动提供…

QT在安装后添加新组件【QT基础入门 环境搭建】

一、Qt的安装目录下找到MaintenanceTool工具 二、双击该exe文件运行该工具(界面可能不相同但功能一样) 登录账号,进入以下界面,点击下一步 选择更新组件,出现以下提示 三、此时需要手动添加储存库 1.进入下面网站,选择一个国内镜像 Qt Downloads 点击后面的HTTP可进入…

info文档与man手册

man 手册 man --version# 查看版本 man 2 socket# 查看section2中的socket yum install man-pages# 更新man手册man -f socket# 列出所有章节的socket # man -f刚开始使用的时候不显示 # centos7执行mandb命令,7以下的版本执行makewhatis命令 # 之后执行man -f就生效了 [rootk…

Jmeter —— 常用的几种断言方法(基本用法)

在使用JMeter进行性能测试或者接口自动化测试工作中,经常会用到的一个功能,就是断言,断言相当于检查点,它是用来判断系统返回的响应结果是否正确,以此帮我们判断测试是否通过,本文 主要介绍几种常用的断言&…

计算机算法分析与设计(3)---循环赛日程表(含代C++码)

循环赛日程表 一、内容概述二、代码实现2.1 分治代码2.2 结果图 一、内容概述 二、代码实现 2.1 分治代码 // 循环赛日程表 #include<iostream> #include<cmath> using namespace std;void schedule(int k, int n, int** array) // 数组下标从1开始 {for (int …

数字孪生基础设施需求分析

数字孪生基础设施需求分析 “基础设施”&#xff08;infrastructure&#xff09;新型基础设施建设 “基础设施”&#xff08;infrastructure&#xff09; 一词最早于1875年在法文中出现&#xff0c;但该词汇由拉丁文构成&#xff0c;infrastructure分为infra&#xff08;拉丁文…

win10 安装 Langchain-Chatchat 避坑指南(2023年9月18日v0.2.4版本,包含全部下载内容!)

网上教程都是基于外网或者翻墙的&#xff0c;而且细节极其不清晰&#xff0c;尤其是最关键的模型下载。 另外提一句&#xff0c;我的显卡是&#xff1a;3080Ti 16GB版本&#xff0c;运行之后&#xff0c;显存占用13-14GB 1、安装Anaconda&#xff08;这个就不啰嗦了&#xff0c…

Idea创建springboot项目

1、选择file—>new –->project 2、选择“Spring Initializr”&#xff0c;点击“next”&#xff0c;进入工程信息配置界面修改配置信息. 备注&#xff1a;type类型选择“Maven(Generate a Maven based project achieve)”&#xff0c;生成工程路径。 3、点击next按钮&a…

最全测试管理岗面试题(上)

1、怎么改善团队低迷现状&#xff1f; 改善团队低迷的现状是一个重要的管理挑战。以下是一些可能有助于改善团队状态的方法&#xff1a; ① 深入了解问题&#xff1a;首先&#xff0c;需要了解低迷的原因。这可能涉及与团队成员的个人会谈&#xff0c;收集反馈&#xff0c;观…

Java微信支付集成开发

文章目录 [toc] 1.接入前准备1.1 微信商户平台注册商户号1.1.1 微信支付商户接入指引1.1.2 微信支付服务商接入指引 1.2 微信开放平台注册小程序和公众号1.3 微信开放平台注册开发者账号1.4 微信商户平台绑定小程序和公众号的appId账号1.4.1 微信公众平台扫码登录微信公众号账号…

C++:初始化列表,static成员,友元,内部类

个人主页 &#xff1a; 个人主页 个人专栏 &#xff1a; 《数据结构》 《C语言》《C》 文章目录 前言一、初始化列表二、static成员三、友元四、内部类总结 前言 本篇博客作为C&#xff1a;初始化列表&#xff0c;static成员&#xff0c;友元&#xff0c;内部类的知识总结。 一…

Git学习笔记7

github上多人协助开发演示过程&#xff1a; 张三是项目作者。 李四是一个协同的用户。觉得项目不错&#xff0c;想增加一些功能。 clone与fork的区别&#xff1a; clone&#xff1a;任何人都可以下载作者的整个项目&#xff0c;但是非作者不能push到作者的项目里。&#xff…

MDPI模板报错的问题---提示缺少sty文件

MDPI模板报错的问题—提示缺少sty文件 平时大多数提交IEEE trans模板时大多使用CTEX编译&#xff0c;然而&#xff0c;MDPI模板需要用texlive&#xff0c;二者之间如果先安装CTEX后安装texlive将会导致库文件的冲突。结果将会报缺少sty的文件错。网上提供了很多解决方案&#…