qt静态编译 全自动编译qt静态库 qt5 windows安装qt (2024.2.23)

news/2024/11/15 18:57:21/文章来源:https://www.cnblogs.com/xy0797/p/18372635

全自动编译qt5静态库(2024.2.23)

本教程是从无到有配置qt.io和vcpkg实现全自动编译qt5的静态库,使得您可以静态编译qt项目

0. 安装Visual Studio 2022

这个我就不多解释了,直接去官网下载社区版本,勾选使用C++的桌面开发安装好就行

1. 安装qt.io的开发环境

1.1 下载在线安装包并且配置国内源启动

到清华源下载在线安装包

QT官方现在已经不再提供离线安装包了,所以说我们只能用在线的

https://mirrors.tuna.tsinghua.edu.cn/qt/official_releases/online_installers/

image

下载后别急着启动,我们打开cmd

输入下面的命令,双引号里面的路径换成你下载的安装包的实际位置

"C:\Users\Administrator\Downloads\qt-unified-windows-x64-online.exe" --mirror https://mirrors.ustc.edu.cn/qtproject

这样子启动可以让我们的在线安装包使用国内的源,这样子我们在国内不挂代理下载也能很快

1.2 安装qt.io开发环境

登录qt账号

image

如果没有就点击sign up注册一个,因为不登录安装不了

image

同意协议,下一步

image

下一步

image

选择你同不同意发送数据帮助qt改良软件,任选其一,下一步

image

选择安装目录,选择自定义安装,下一步

image

筛选条件中勾选Archive,然后点击Filter重新载入版本列表

image

选择要安装的版本,本教程是编译qt5版本

image

我这里选择了Qt 5.15.2MSVC 2019 32bitMSVC 2019 64bit版本

image

同意协议,下一步

image

然后qt安装工具会下载安装,完成后点击Finish

image

2. 安装vcpkg

一定要确保您安装vcpkg的盘有不少于72GB/126GB的空间!

如图,编译完成后超级大,空间一定要留足

image

如果你在编译64位版本的基础上还需要编译32位版本,那么需要留够126GB!

image

2.1 打开目标的盘

打开cmd,在你空间够的盘执行命令

我自己是D盘空间够大,所以说我就到D盘安装vcpkg:

D:
cd D:\

2.2 设置代理

然后我们国内访问github会特别慢,所以说我们需要设置代理:

git config --global http.proxy http://127.0.0.1:6521
git config --global https.proxy http://127.0.0.1:6521
set HTTP_PROXY=http://127.0.0.1:6521
set HTTPS_PROXY=http://127.0.0.1:6521

这里面的链接就换成你代理工具的提供的http链接,每个人端口都不一样

注意:如果端口超六万,很可能进入自由端口段,极易被其它程序占用端口,这种情况下建议修改端口为2000-50000的随机数

代理设置好后就可以开始下载安装vcpkg

2.3 下载安装vcpkg

先下载:

git clone https://github.com/microsoft/vcpkg

安装:

cd D:\vcpkg\
bootstrap-vcpkg.bat

设置环境变量,将vcpkg.exe文件所在目录加入到环境变量PATH中

image

如果后续要更新vcpkg,用git拉取新改动然后合并到本地,或者到Github页面下载zip解压覆盖。然后重新设置代理,重新运行bootstrap-vcpkg.bat

3. 编译安装qt5的静态库

3.1 重启控制台,重新设置代理

我们先关闭旧的cmd窗口,重新打开cmd,重新设置代理并且进入目录vcpkg:

D:
cd D:\vcpkg
git config --global http.proxy http://127.0.0.1:6521
git config --global https.proxy http://127.0.0.1:6521
set HTTP_PROXY=http://127.0.0.1:6521
set HTTPS_PROXY=http://127.0.0.1:6521

3.2 一键下载编译安装

有了vcpkg就能傻瓜式编译静态库了

不需要自己编译openssl!不需要自己下载那一堆前置库!

全自动编译所有需要的东西,无需任何人工!就像安装个软件一样轻松!

这个过程中有大量到github下载东西的请求,所以说必须设置代理,不然很可能出问题

并且使用前记得测试你代理的真连接延迟和访问速度,确保不误事

然后运行一键下载编译安装qt5静态库的命令:

vcpkg install qt5:x64-windows-static

接下来我们就可以去干别的事情了,大概每10分钟看一下就好

如果出错了,可以按照提示去看日志,日志的最底下会写明出错原因

如果网络每问题的话,大概率就是磁盘空间不足,所以说我前面会反复强调留够72GB以上,我自己为保险选择了100GB空闲以上的盘安装

编译时间会特别长,我的笔记本电脑固态盘,插电用时1小时6分钟,下载源代码文件流量消耗5GB。我的耗时仅供参考,如果你的CPU、网络和硬盘好,下载编译安装会更快

image

如果你还要编译32位的版本,那么挨着执行这个:

vcpkg install qt5:x86-windows-static

我自己是用了43分钟才编译完成

image

3.3 添加到开发环境

先执行vcpkg的安装命令

vcpkg integrate install

这样子MSVC就会识别vcpkg的安装目录了,CMake项目使用-DCMAKE_TOOLCHAIN_FILE=D:/vcpkg/scripts/buildsystems/vcpkg.cmake也能一键添加它里面安装的库

image

如果要从vcpkg能识别的开发环境里面移除vcpkg目录,请执行vcpkg integrate remove


然后qt.io需要我们手动配置下:

先随便打开一个qt项目,或者随便创建一个空的qt项目

然后点击项目选项卡,点击管理构建套件按钮

image

弹出窗口中的左侧选中列表保持选中默认的构建套件(Kit),上方选择夹选择Qt版本选项卡,点击右侧添加按钮

image

这时会弹窗让你选择qmake文件,选择vcpkg\installed\x64-windows-static\tools\qt5\bin

image

然后我们就能看到5.15.12(qt5)已经成功添加到Qt版本列表中了

这是我们需要先点击应用按钮,然后再切换到上方的构建套件(Kit)选项卡

image

然后点击添加按钮添加构建套件

image

名字我们叫qt5 vcpkg static,Qt版本选择我们刚刚添加的5.15.12(qt5)版本,最后点击确定按钮保存设置

image

然后我们就可以在项目属性中看到我们刚刚添加的qt5 vcpkg static构建套件了,选中它添加到我们的项目里

image

然后我们就可以编译项目了,这里我选择Release模式构建

image

这时在build-项目名称-qt5_vcpkg_static-Release\release下就能看到静态编译出来的程序了:

image

如图,静态链接的程序就不用依赖那么多dll运行了

3.4 删除编译中间文件节约硬盘空间(可选)

如果你不需要导出vcpkg的包的话,可以删除vcpkg目录下的buildtrees文件夹

image

如果同时编译了32位,则能释放足足73GB

这里面是源代码和中间生成的一些文件,删除他们对我们使用库没有任何影响

所以说如果你跟着我的教程只是为了使用qt静态库,其它的都不需要的话,这个文件夹完全可以删除以释放空间

不过我们只能编译完成后删除,如果你的硬盘剩余空间小于72GB/126GB,那么照样是会因为剩余空间不足编译会失败的

除此之外,还有C:\Users\你的用户名\AppData\Local\vcpkg目录,这里面有编译好的包,7GB左右。

image

如果要安装其它项目的话,删除这个会导致你编译qt库途中编译的相关依赖库可能要重复编译;不过很多情况下它们依赖的库版本不同,这个缓存很难命中,所以说直接删除即可。

然后vcpkg目录下的downloads文件夹也可以删除,大约1.8GB,里面是编译qt静态库途中下载的文件。

就我个人观察,编译出的qt静态库是在installed文件夹内,而packages则是编译qt静态库的依赖库,如果仅是为了使用qt静态库,删除packages文件夹应该也是行的,但是本人没有尝试过,不推荐尝试

个人觉得删除packages应该会破坏vcpkg对中间依赖项的记录,可能会导致后续安装一些包时出现问题,所以还是建议保留

总结:

  1. vcpkg目录下的buildtrees文件夹可直接删除。官方说了这个是供vcpkg项目组调试定位问题用的,对于我们用户来说,安装完包后即可删除该文件夹。
  2. C:\Users\你的用户名\AppData\Local\vcpkg目录也是可删除的,但是请酌情考虑。这个文件夹是缓存编译结构,删除后安装其它项目就不会复用前面的缓存,导致编译时间增加,建议是定期清理一下,不要太频繁。
  3. vcpkg目录下的downloads文件夹可删除。这个文件夹是下载的源码文件,起一个下载缓存的作用。
  4. vcpkg目录下的packages文件夹不建议删除,影响尚不明确。

结束

别忘了取消设置git代理,不然代理关了的话git会无法联网

git config --global --unset http.proxy
git config --global --unset https.proxy

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

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

相关文章

【python】面向对象之类成员(字段,方法)

1.类的成员可以分为三大类:字段、方法和属性注:所有成员中,只有普通字段的内容保存对象中,即:根据此类创建了多少对象,在内存中就有多少个普通字段。而其他的成员,则都是保存在类中,即:无论对象的多少,在内存中只创建一份。2.字段字段包括:普通字段和静态字段,他们…

2024.8.21

DATE #:20240821 ITEM #:DOC WEEK #:WEDNESDAY DAIL #:捌月拾捌TAGS< BGM = "琴师--要不要买菜" > < theme = oi-contest > < [NULL] > < [空] > < [空] >``` 此情可待成追忆,只是当时已惘然 -- 《锦瑟》 李商隐 ```T1 试卷答案(ex…

回溯part011

今天学习了回溯算法:基本知识,关键是那个模板 组合问题:画树状图+简单的剪枝 电话号码的组合问题,和经典组合问题的差别在于取不同集合中的组合,注意如何有限制的在for循环之前确定循环哪个数组,通过树状图确定for循环中i的大小。1. 基本知识回溯法也可以叫做回溯搜索法,…

『模拟赛』暑假集训CSP提高模拟26

『模拟赛记录』暑假集训CSP提高模拟26Rank 打得一般,倒数第二场了。。A. 博弈 直接搬了牛客的一套题。 一眼没思路,模了一会放弃直接去打 T2 了,后来把 \(\mathcal{O(n^2)}\) 暴力 打了拿 30pts。 正解用到了异或哈希。首先确定合法的数量即为总对数 \(\frac{n(n-1)}{2}\) 减…

java变量定义与数据类型

变量:在java程序运行过程中,其值可以发送改变的量 定义变量的语句格式: 数据类型 变量名 = 初始化值; 使用变量的注意事项: 1、使用基本数据类型的变量,实际上使用的是变量中存储的值 2、在同一作用域(同一个大括号)中,变量名不能重复 3、变量名是区分大小写的 4、java…

040、Vue3+TypeScript基础,使用nanoid库生成id

01、使用powershell,输入npm i nanoid来安装: 02、App.vue代码如下:<template><div class="app"><h2 class="title">App.Vue</h2><Page1/><br><Page2/></div> </template><script lang="…

2024.8.21 鲜花

太水了,但还是有重点的Never Gonna Give You Up Were no strangers to love You know the rules and so do I A full commitments what Im thinking of You wouldnt get this from any other guy I just wanna tell you how Im feeling Gotta make you understand Never gonna…

AI大模型应用

参考文档https://creative.chat/1.调用AI大模型API 1.1文心一言 https://console.bce.baidu.com/qianfan/ais/console/applicationConsole/application创建应用:https://console.bce.baidu.com/qianfan/ais/console/applicationConsole/application 示例代码:https://console…

【Azure Redis】AKS中使用Lettuce连接Redis Cache出现 timed out 问题的解决思路

问题描述 使用 Lettuce 客户端,在AKS环境中连接Azure Redis服务,出现超时错误。 错误消息: Redis command timed out , command timed out after 1 minute(s). 错误截图: 解决思路 当出现Redis客户端连接不上时,需要先排查Redis服务器的状态,比如Server Load是否处于高…

关键字、标识符、注释三剑客

关键字概述 被Java语言赋予特定含义的单词 关键字特点 组成关键字的字母全部小写 关键字注意事项 goto和const作为保留字存在,目前并不使用 类似IDEA这样的集成工具,针对关键字有特殊的颜色标记,非常直观标识符概述 就是给类,接口,方法,变量等起名字时使用的字符序列 组成规则…

三步高考大捷

hi, ____________,见字如晤,展信舒颜。 首先,预祝你考上理想的大学。 当然,这并不容易。正因为有难度,我们才一起引入 OKR 方法论 OKR(Objectives and Key Results, 目标与关键结果)。 大名鼎鼎的 OKR 最早是由 Goolge 这个全球聚集最聪明人的企业管理方法。 后来,人们发…