欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用 Visual Studio 建置 Qt 6

程序员文章站 2022-07-13 23:35:28
...

因为异端置这个是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),他只复制了版……
所以本文还是采用了复制构建却设置的方法。

相关标签: qt qt4

上一篇: exit(0)和exit(1)

下一篇: Ticker