源码编译Qt 5.15.9+msvc2019

news2024/12/23 14:20:22

官方文档里给出了详细步骤:
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,实测非常耗时,还不如直接删掉源码目录重新解压

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"

其中,
LLVM_INSTALL_DIR=E:\LLVM是LLVM的安装目录,如果没有指定将无法编译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

实测中间卡在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.
...

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

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

相关文章

实战 | 服务端开发与计算机网络结合的完美案例

前言 大家好,我是Martin 后端,可以说是仅次于算法岗之外竞争最为激烈的岗位,而其中的服务端开发也是很多人会选择在秋招中投递的一个岗位,我想对于很多人来说,走上服务端开发之路的起点就是一个回声服务器了。 今天…

canal

1 安装配置 1.1 下载 https://github.com/alibaba/canal/releases/download/canal-1.1.6/canal.deployer-1.1.6.tar.gz 1.2 mysql配置binlog # on 时,代表着开启 show VARIABLES like log_bin; 1.3 创建MySQL canal用户 # 创建用户 create user canal% ident…

LabVIEW使用巴特沃兹低通滤波器过滤噪声

LabVIEW使用巴特沃兹低通滤波器过滤噪声 设备采集到的数据往往都有噪声,有时候这些数据要做判断使用,如果不处理往往会影响最终的结果。可以使用动态平滑,或者中值滤波等方法。这里介绍使用巴特沃斯低通滤波,也是非常方便的。 下…

Python算法练习 9.18

leetcode 1657 确定两个字符串是否相似 如果可以使用以下操作从一个字符串得到另一个字符串,则认为两个字符串 接近 : 操作 1:交换任意两个 现有 字符。 例如,abcde -> aecdb操作 2:将一个 现有 字符的每次出现转…

Stable Diffusion 系统教程 | 强大的ControlNet 控制网

2023年的2月13日,一款名叫ControlNet的插件横空出世,AI绘画变得更加可控 ControlNet直译过来很简单,就叫做控制网,开发者是一名华裔,毕业于苏州大学,目前在斯坦福做读博士一年级,大佬大佬&…

typora补丁

背景: 安装typora后试用期30天,打补丁可解决此问题 补丁路径 某盘 链接:https://pan.baidu.com/s/18MLqJHqTL7DXdCoaZvMfhg 提取码:vkgg 1.安装typora软件 2.打补丁 2.1.下载补丁包 解压 2.2.将解压文件复制到安装目录 2.3重…

【集成学习】对已训练好的模型进行投票

在不同的数据预处理情况下训练得到了三个SVM模型,结果都差不多,对这三个模型的分类结果进行投票 1、三个模型的model_path # 最终model的path self.model_path log_path/model_name_model.gz self.time_log log_path/model_name_time_log.csv# 模型1…

Java 华为真题-新学校选址

需求: 为了解新学期学生暴涨的问题,小乐村要建立所新学校,考虑到学生上学安全问题,需要所有学生家到学校的距离最短。 假设学校和所有学生家都走在一条直线之上,请问学校建立在什么位置,能使得到学校到各个学生家的距离和最短。 输入描述&…

【面试经典150 | 数组】轮转数组

文章目录 写在前面Tag题目来源题目解读解题思路方法一:使用额外的数组方法二:翻转数组 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更…… 专栏内容以分析题目为主,并附…

网络安全是什么?手把手教你认识网络安全

一、网络安全 1.概念 网络安全从其本质上讲就是网络上的信息安全,指网络系统的硬件、软件及数据受到保护。不遭受破坏、更改、泄露,系统可靠正常地运行,网络服务不中断。 (1)基本特征 网络安全根据其本质的界定&#…

怎样用图片去搜索商品呢?

taobao.item_search_img 为了进行电商平台 的API开发,首先我们需要做下面几件事情。 1)开发者注册一个账号 2)然后为每个taobao应用注册一个应用程序键(App Key) 。 3)下载taobaoAPI的SDK并掌握基本的API基础知识和…

博客数量为啥产出少了呢

如题博客数量为啥产出少了 gpt出来了之后大部分问题都可以通过gpt搜索到结果了,慢慢的就养成习惯了,很容易知道结果的东西就不想记录下来了,这获取就是人类的惰性吧,哈哈哈,越容易获取越不珍惜 提出几个问题 1. gpt是通过我们大家写的博客和大量文档学习出来的,如果大家都不…

PMP第七版考试该怎么学?

第七版怎么学习,建议报个培训班,第七版比第六版更加难以理解,除非专业人士,真的想一个人啃完难度很大。 想自学的话,可以建议学习第六版加敏捷的内容,考纲就是这两部分的内容。 考试占比参考(2…

初识Linux操作系统

W...Y的主页 😊 代码仓库分享 💕 本次内容,我们主要了解一下Linux的发展历史。 目录 Linux 背景介绍 发展史 操作系统的兴起 第一个操作系统——Unix Linux的发展史 开源 Linux官网 企业应用现状 发行版本 Linux 背景介绍 发展史 …

《低代码指南》——Airtable再裁员27% 低代码市场生变?

继去年年底裁员254人后,低代码平台提供商Airtable宣布在九个月内进行第二轮237人裁员,约占公司员工的27%,旨在实现公司“现金流为正”。 Airtable首席执行官Howie Liu接受福布斯采访透露,裁员是公司专注于赢得大型企业客户和控制支出计划的一部分,也是该公司在疫情期间经…

【LeetCode-中等题】150. 逆波兰表达式求值

文章目录 题目方法一&#xff1a;栈 题目 方法一&#xff1a;栈 class Solution {public int evalRPN(String[] tokens) {Deque<Integer> deque new LinkedList<>();String rpn "-*/";//符号集 用来判断扫描的是否为运算符int sum 0;for(int i 0 ; i…

JDK18特性

文章目录 JAVA18概述1. 默认UTF-8字符编码2. 简单的Web服务器3.JavaDoc的增强4. 反射功能的新特性5.Vector API(三次孵化)6. 互联网地址解析SPI7. 外部函数和内存API(二次孵化)8.switch 表达式 JAVA18概述 Java 18 在 2022 年 3 月 22 日正式发布&#xff0c;Java 18 不是一个…

简单的手机电脑无线传输方案(android@windows)

文章目录 abstractwindows浏览android文件环境准备客户端软件无线网络链接步骤其他方法 手机浏览电脑文件公网局域网everythingpython http.server abstract windows访问android文件 android访问桌面系统上的文件 windows浏览android文件 环境准备 客户端软件 android手机…

引导加载程序

引导加载程序概览 引导加载程序是供应商专有的映像&#xff0c;负责在设备上启动内核。引导加载程序会监护设备状态&#xff0c;负责初始化可信执行环境 (TEE) 以及绑定其信任根。引导加载程序还会在将执行工作移到内核之前先验证 boot 和 recovery 分区的完整性。 引导加载程…

京都大学利用 CNN 预测粮食产量,丰收不问天,问 AI 就够了

联合国预测&#xff0c;2050 年世界人口预计达到 91 亿&#xff0c;全球对粮食的需求量将增加 70%。然而&#xff0c;由于世界农业发展不均衡&#xff0c;很多地区的粮食产量尚无法被准确统计&#xff0c;因此无法对这些区域的农业发展做出合理规划。现有的粮食产量统计方法则难…