首页 三方库编译系列6:Qt5.15.2
文章
取消

三方库编译系列6:Qt5.15.2

下载压缩包

https://mirrors.ustc.edu.cn/qtproject/archive/qt/

依赖项

1,openssl:-openssl-runtime OPENSSL_PREFIX=”openssl_path”

2,ICU(可选)支持unicode和国际化,它的头文件和库文件需要设置到 INCLUDE and LIB环境变量里面。需要传递 -icu 选项

3,ANGLE (libEGL.dll and libGLESv2.dll) ,会将openGL ES的api转成DX,就不需要安装驱动了,需要安装DX SDK(一般Windows SDK已经包含了),需要定义 ANGLE_DIR 环境变量。

也可以不用ANGLE,而是OpenGL: -opengl dynamic(openGL找不到才会用angle)

需要安装perl,python(应用商店安装),如果使用ANGLE ,还需要安装GPerf和Bison,Flex,这些可以在 GnuWin32 and Win flex-bison 里面下载到。然后加到PATH变量里面,还需要重命名下

win_bison and win_flex 成bison and flex,放在gnuwin32\bin目录

另外QDoc还需要安装Clang

vs 专业版本在arm64机器上安装不上,可以安装社区版本(家庭版安装不了vs)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
vcvarsall.bat amd64 //设置环境变量
mkdir qt-arm
cd qt-arm
SET _ROOT=C:\Qt\Qt-5
SET PATH=%_ROOT%\qtbase\bin;%_ROOT%\gnuwin32\bin;%PATH%
nmake distclean //如果重新configure需要执行这个

../qt-everywhere-src-5.15.2/configure -openssl-runtime OPENSSL_PREFIX="C:/devel/compile/build/openssl"
-opengl dynamic
-platform win32-msvc //最好不要传这个,在arm64机器上让它自己检测
-xplatform win32-arm64-msvc2017 //交叉编译才用
-release -force-debug-info -separate-debug-info  -skip qtdoc -skip qt3d -skip qtquick3d -no-feature-assistant
-nomake examples -nomake tests -skip qtwebengine -opensource -skip qtxmlpatterns
-prefix "C:/devel/compile/build/qt"

注意
如果是在vcvarsall.bat amd64环境下,可以-platform win32-msvc -xplatform win32-arm64-msvc2017
如果在vcvarsamd64_arm64下应该就不需要xplatform 跨平台编译选项了。
Checking for target architecture... arm64
Checking for host architecture... x86_64
Mode ................................... release (with debug info)

如果要调试版本:
-debug 

编译
jom或nmake
nmake install 或jom install //nmake是vs开发环境里面的,类似make

其它编译选项

用-skip排除模块,如-skip qtconnectivity会禁用Qt NFC和Bluetooth 
用-feature-<feature> and -no-feature-<feature> 打开或关闭特性 -list-features

3方库:
可以使用qt源码包里面的或者是系统的,比如-qt-zlib或-system-zlib,也可以直接禁用,使用-no
前缀,如-no-zlib
跨平台选项:
-xplatform 目标平台。更多可以查看 qtbase/mkspecs

链接tracegen.exe时报错LNK1112: module machine type 'x64' conflicts with target machine type 'ARM64'
这个是生成 Qt 追踪文件的工具,用于性能分析 

其它:
-extprefix,-hostprefix,-external-hosstbindir 交叉编译相关
-make-tool <tool>        使用指定tool编译qmake,默认是nmake , Windows Only

vcvarsamd64_arm64.bat与vcvarsarm64_amd64.bat2个好像是反过来的,啥区别
源架构 → 目标架构:
amd64_arm64:从AMD64(x64)架构编译到ARM64架构的交叉编译。
arm64_amd64 从ARM64架构编译到AMD64(x64)架构的交叉编译。
应该使用vcvarsarm64.bat

参考

https://doc.qt.io/qt-5/windows-building.html

https://doc.qt.io/qt-5/configure-options.html

本文由作者按照 CC BY 4.0 进行授权