使用 Visual Studio 建置 Qt 6
因为异端置这个是Qt作为图形界面开发的环境,所以在自己之前,异端曾经记录过建Qt 4.6.3的经验;不过后来,因为决定摆脱建置、工厂开发用Qt提供的Qt SDK,官方知识研究怎么自己建置了。
但是相对地,当引入GitLab CI/CD后,就变成了研究怎么在Windows Docker里面安装Qt SDK了。
开始玩这部分后,发现才Qt在这真的好极了……本来以为以为第一次后,以后就没有问题了,不过后来Qt一直修改他的程序安装,导致往往会弄弄要重建Docker镜像的时候,安装Qt SDK的剧本就废掉、要修改(2020/02)…
而后来呢,Qt更直接把必须安装程序拿掉,要使用线上安装版,然后下载速度又慢到不行……
所以后来呢,异端只好又开始研究怎么自己建置Qt了。
这次使用的版本是Visual Studio 2019、建置的Qt版本是Qt 6.1.0,原码可以从官方网站下载(页面、下载速度很慢)。
准备建置环境
官方的《Qt for Windows - Building from Source》,可知自己搭建了Qt SDK,除了需要Visual Studio 2019外,还需要以下工具:
CMake 3.16+(官网)
忍者(官网)
Perl(Heresy 这个是用Strawberry Perl)
Python 3(官网)
因为异端是通过Docker来构建Qt,所以这个需要的工具,也都写成Dockerfile来玩了~
下面就是可以拆建置 Qt 6.1.0 的 Dockerfile:
#转义=`
# 使用最新的 Windows Server Core 映像和 .NET Framework 4.8。
从 mcr.microsoft.com/dotnet/framework/sdk:4.8-windowsservercore-20H2
# 恢复默认的 Windows shell 以进行正确的批处理。
SHELL ["cmd", "/S", "/C"]
# 下载 Build Tools 2019 引导程序。
添加 https://aka.ms/vs/16/release/vs_buildtools.exe C:TEMPvs_buildtools.exe
添加 https://aka.ms/vs/16/release/channel C:TEMPVisualStudio.chman
# 安装构建工具,不包括已知问题的工作负载和组件。
运行 C:TEMPvs_buildtools.exe --quiet --wait --norestart --nocache `
--channelUri C:TEMPVisualStudio.chman `
--installChannelUri C:TEMPVisualStudio.chman `
--installPath C:BuildTools `
--add Microsoft.VisualStudio .Workload.VCTools `
--add Microsoft.VisualStudio.Component.VC.Tools.x86.x64 `
--add Microsoft.VisualStudio.Component.VC.ATLMFC `
--add Microsoft.VisualStudio.Component.Windows10SDK.19041
# 安装 7-Zip
添加 https://www.7-zip.org/a/7z1900-x64.exe C:TEMP7z.exe
运行 C:TEMP7z.exe /S /D=C:7Zip
# 下载 CMake
添加 https://github.com/Kitware/CMake/releases/download/v3.20.2/cmake-3.20.2-windows-x86_64.msi C:TEMPcmake.msi
RUN C:TEMPcmake.msi /qn
# 安装 Perl
添加 https://strawberryperl.com/download/5.32.1.1/strawberry-perl-5.32.1.1-64bit.msi C:TEMPstrawberry-perl.msi
RUN C:TEMPstrawberry-perl.msi /qn
# 安装 Python
添加 https://www.python.org/ftp/python/3.9.5/python-3.9.5-amd64.exe C:TEMPpython.exe
RUN c:temppython.exe /quiet InstallAllUsers=1 PrependPath=1
# 下载忍者
添加 https://github.com/ninja-build/ninja/releases/download/v1.10.2/ninja-win.zip C:TEMPninja.zip
RUN C:7Zip7z.exe x C:TEMPninja.zip -y -oc:忍者
# 清理下载文件
运行 删除 C:TEMP* /q
# 添加路径
RUN setx /M "path" "%path%;c:ninja;C:7Zip;C:Strawberryperlbin;C:Program FilesCMakebin"
# 使用指定的任何其他命令启动开发人员命令提示符。
入口点 c:BuildToolsVCAuxiliaryBuildvcvars64.bat &&
之后只要执行:
docker build -t qtbuilder S:qtbuilder
就可以创建出一个名为「qtbuilder」的 Docker 镜像,可以支持建置 Qt SDK 了。
当然,如果不想用 Docker 来建置,也可以把上述软体都直接装在电脑上来建置,不过还记得路径、让系统能找到上述环境的程序执行就是了。
建置流程
准备建置
接下来,就是要开始构建了~这首先是Qt的原始码解压缩。
这里下载的档案是「qt-everywhere-src-6.1.0.zip」,假装是把它解压缩后的「s:qt-everywhere-src-6.1.0.0」。
然后,就是建立Docker的容器、在里面准备来构建了~
docker run -it --rm --isolation process --storage-opt size=64G
-v S:qt-everywhere-src-6.1.0 :c:code
qtbuilder cmd
这就是Qt的原始码对应到Docker内的c:code这个路径来做访问;所以如果路径不一样的话,请自行修改红字的部分。
另外要注意的,是因为建了Qt会需要大量的硬盘空间所以这篇文章也有通过「–storage-opt size=64G」这个,调高Docker内部的硬盘空间(预设应该是20GB的参数) )、否则建到自己的问题就会发生硬盘空间不足的问题;如果自己不想用自己的空间玩的话,那就要额外去控制音量映射、并相对的路径了。
在进入Docker后,则是先执行下面的指令:
mkdir c:build_debug c:build_release cd c:code_output
cd c:
build_debug c:codeconfigure -prefix c:code_output -debug
cd c:build_release
c:codeconfigure -prefix c:code_output -release
这边会建立三个资料夹,build_debug,build_release和_output,前面两个是用来放置建置过程的相关档案的,一个是调试版,一个则是发行版。
之后则是最后产生的Qt SDK档案,这个C:code里面是为了把最后需要的档案整理「s:qt-everywhere-src-6.1.0」这个从外部输入的资料夹里面;如果像另外两个数据夹一样直接删除:下话,一关闭docker就会全部消失了。
而配置的部分,则是通过 Qt 提供的脚本,来生成 CMake 所需要的文件;本文的「-prefix c:code_output 建置」是指定建置后库文件何时何地;最后面的「- debug」或「-release」则是告诉它要建置 debug 或 release。
如果喜欢建置调试、发布一个,只要选一个就好了。
其他的参数,则可以参考官方的文件。
开始建置
上面的配置完成后,就可以依序构建不同的版本了。
以调试板来说,就是执行:
cd c:build_debug
cmake --build 。
cmake --install 。
开始建置 Qt SDK 的调试了。
由于 Qt 制作了一个巧妙的模拟肥大的函式库,所以这个故事的建置过程会时间,建议找一个好一点的闲置电脑来跑。
其中,cmake --build是开始建置,建置完成后,建置好档案会散就是麻烦麻烦处理;接下来执行cmake --install,要求他把必要的档案、复制(安装)到指定的输出位置(_output),即可轻松使用。
而Heresy这个是意意debug和发布原版的输出设置成一样,在运行完之后,就可以把真实的灵感刻结果都一起了。
所以等debug版建置好后,只要再执行:
cd c:build_release
cmake --build 。
cmake --install 。
就可以建置发布版了。
当重新都完成后,就可以关掉 docker 了;此时,在「S:qt-everywhere-src-6.1.0_output」下就可以找到可以建置完成的 Qt 6.1.0 SDK 了~
有异端这件事构建出来的档案、整个资料大小高达2.6GB左右……恩,很安心呢~XD
附注:
下载的Qt 6.1.0里面的README还是写Qt5…orz
里面写的需求也不一样。
Qt 提供的配置虽然可以指定「-debug-and-release」要求同时建置调试和发布的版本;但尽管在建置(cmake build)的过程确实同时建置了两个版本,但在要求他把档案复制到输出路径的时候(cmake install),他只复制了版……
所以本文还是采用了复制构建却设置的方法。
上一篇: exit(0)和exit(1)
下一篇: Ticker
推荐阅读
-
Visual Studio 2010怎么使用自带的安装项目打包程序?
-
Visual Studio 2013中scanf函数无法使用的详细解决办法
-
如何使用Visual Studio 2010在数据库中生成随机测试数据
-
Visual Studio.Net 内幕(6)
-
Visual Studio 2017使用淘宝镜像的方法
-
最锋利的Visual Studio Web开发工具扩展:Web Essentials使用详解
-
Visual Studio自带报表Report Viewer使用体验
-
使用Visual Studio 2017作为Linux C++开发工具
-
使用Visual Studio 2017写静态库
-
visual studio code教程 vscode的基础使用和自定义设置方法