全自动编译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/
下载后别急着启动,我们打开cmd
输入下面的命令,双引号里面的路径换成你下载的安装包的实际位置
"C:\Users\Administrator\Downloads\qt-unified-windows-x64-online.exe" --mirror https://mirrors.ustc.edu.cn/qtproject
这样子启动可以让我们的在线安装包使用国内的源,这样子我们在国内不挂代理下载也能很快
1.2 安装qt.io开发环境
登录qt账号
如果没有就点击sign up
注册一个,因为不登录安装不了
同意协议,下一步
下一步
选择你同不同意发送数据帮助qt改良软件,任选其一,下一步
选择安装目录,选择自定义安装,下一步
筛选条件中勾选Archive
,然后点击Filter
重新载入版本列表
选择要安装的版本,本教程是编译qt5版本
我这里选择了Qt 5.15.2
的MSVC 2019 32bit
和MSVC 2019 64bit
版本
同意协议,下一步
然后qt安装工具会下载安装,完成后点击Finish
2. 安装vcpkg
一定要确保您安装vcpkg的盘有不少于72GB/126GB的空间!
如图,编译完成后超级大,空间一定要留足
如果你在编译64位版本的基础上还需要编译32位版本,那么需要留够126GB!
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中
如果后续要更新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、网络和硬盘好,下载编译安装会更快
如果你还要编译32位的版本,那么挨着执行这个:
vcpkg install qt5:x86-windows-static
我自己是用了43分钟才编译完成
3.3 添加到开发环境
先执行vcpkg的安装命令
vcpkg integrate install
这样子MSVC就会识别vcpkg的安装目录了,CMake项目使用-DCMAKE_TOOLCHAIN_FILE=D:/vcpkg/scripts/buildsystems/vcpkg.cmake
也能一键添加它里面安装的库
如果要从vcpkg能识别的开发环境里面移除vcpkg目录,请执行
vcpkg integrate remove
然后qt.io需要我们手动配置下:
先随便打开一个qt项目,或者随便创建一个空的qt项目
然后点击项目
选项卡,点击管理构建套件
按钮
弹出窗口中的左侧选中列表保持选中默认的构建套件(Kit)
,上方选择夹选择Qt版本
选项卡,点击右侧添加
按钮
这时会弹窗让你选择qmake
文件,选择vcpkg\installed\x64-windows-static\tools\qt5\bin
然后我们就能看到5.15.12(qt5)
已经成功添加到Qt版本列表中了
这是我们需要先点击应用
按钮,然后再切换到上方的构建套件(Kit)
选项卡
然后点击添加
按钮添加构建套件
名字我们叫qt5 vcpkg static
,Qt版本选择我们刚刚添加的5.15.12(qt5)
版本,最后点击确定
按钮保存设置
然后我们就可以在项目属性中看到我们刚刚添加的qt5 vcpkg static
构建套件了,选中它添加到我们的项目里
然后我们就可以编译项目了,这里我选择Release模式构建
这时在build-项目名称-qt5_vcpkg_static-Release\release
下就能看到静态编译出来的程序了:
如图,静态链接的程序就不用依赖那么多dll运行了
3.4 删除编译中间文件节约硬盘空间(可选)
如果你不需要导出vcpkg的包的话,可以删除vcpkg目录下的buildtrees
文件夹
如果同时编译了32位,则能释放足足73GB
这里面是源代码和中间生成的一些文件,删除他们对我们使用库没有任何影响
所以说如果你跟着我的教程只是为了使用qt静态库,其它的都不需要的话,这个文件夹完全可以删除以释放空间
不过我们只能编译完成后删除,如果你的硬盘剩余空间小于72GB/126GB,那么照样是会因为剩余空间不足编译会失败的
除此之外,还有C:\Users\你的用户名\AppData\Local\vcpkg
目录,这里面有编译好的包,7GB
左右。
如果要安装其它项目的话,删除这个会导致你编译qt库途中编译的相关依赖库可能要重复编译;不过很多情况下它们依赖的库版本不同,这个缓存很难命中,所以说直接删除即可。
然后vcpkg目录下的downloads
文件夹也可以删除,大约1.8GB,里面是编译qt静态库途中下载的文件。
就我个人观察,编译出的qt静态库是在installed
文件夹内,而packages
则是编译qt静态库的依赖库,如果仅是为了使用qt静态库,删除packages
文件夹应该也是行的,但是本人没有尝试过,不推荐尝试
个人觉得删除packages
应该会破坏vcpkg
对中间依赖项的记录,可能会导致后续安装一些包时出现问题,所以还是建议保留
总结:
vcpkg
目录下的buildtrees
文件夹可直接删除。官方说了这个是供vcpkg
项目组调试定位问题用的,对于我们用户来说,安装完包后即可删除该文件夹。C:\Users\你的用户名\AppData\Local\vcpkg
目录也是可删除的,但是请酌情考虑。这个文件夹是缓存编译结构,删除后安装其它项目就不会复用前面的缓存,导致编译时间增加,建议是定期清理一下,不要太频繁。vcpkg
目录下的downloads
文件夹可删除。这个文件夹是下载的源码文件,起一个下载缓存的作用。vcpkg
目录下的packages
文件夹不建议删除,影响尚不明确。
结束
别忘了取消设置git代理,不然代理关了的话git会无法联网
git config --global --unset http.proxy
git config --global --unset https.proxy