VS2019编译Qt5.7.0(使用VC-LTL5、YY-Thunks)
前言
目标
- 使用较新的VS编译器。
- 支持XP系统。
- 不依赖VC运行时。
- 编译出的DLL尺寸尽可能小。
提示
- Qt最后一个支持Windows XP的版本是
5.7.0。 - 最后一个支持XP的VC编译器版本是
VC14。
解决方案
- 为了使用上最新的VC编译器,并且要求支持XP系统,就得使用第三方开源项目
YY-Thunks。 - 为了不依赖VC运行时,且同时减少编译出的DLL文件大小,我选择使用了第三方开源项目
VC-LTL5。
准备
Qt 5.7.0 源码
VC-LTL5
YY-Thunks
编译
VC-LTL5和YY-Thunks的使用说明查看官方文档,这里不再赘述。
0x01
将VC-LTL helper for nmake.cmd拷贝到Qt源码根目录下,编辑文件
::set WindowsTargetPlatformMinVersion=10.0.10240.0
修改为
set WindowsTargetPlatformMinVersion=5.1.2600.0
0x02
编辑qtbase\mkspecs\common\msvc-desktop.conf文件
- 静态编译参数(不依赖VC运行时)
QMAKE_CFLAGS_RELEASE = -O2 -MD
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MD -Zi
QMAKE_CFLAGS_DEBUG = -Zi -MDd
改为
QMAKE_CFLAGS_RELEASE = -O2 -MT
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MT -Zi
QMAKE_CFLAGS_DEBUG = -Zi -MTd
- 子系统版本
这一步是为了避免程序在XP系统上提示“...不是有效的Win32程序”。
QMAKE_LFLAGS_CONSOLE = /SUBSYSTEM:CONSOLE
QMAKE_LFLAGS_WINDOWS = /SUBSYSTEM:WINDOWS
改为
QMAKE_LFLAGS_CONSOLE = /SUBSYSTEM:CONSOLE,5.01
QMAKE_LFLAGS_WINDOWS = /SUBSYSTEM:WINDOWS,5.01
- 引入YY_Thunks_for_WinXP.obj
QMAKE_LFLAGS = /NOLOGO /DYNAMICBASE /NXCOMPAT
改为
QMAKE_LFLAGS = /NOLOGO /DYNAMICBASE /NXCOMPAT user32.lib ...\YY_Thunks_for_WinXP.obj
其中...\YY_Thunks_for_WinXP.obj是绝对路径。
0x03
运行VS2019命令行工具,CD到Qt源码根目录,运行VC-LTL helper for nmake.cmd,这样就配置好了VC-LTL5的相关参数
我仅编译qtbase和qtdoc模块,编译参数如下
configure -prefix "E:\Qt\vc16-shared" -confirm-license -opensource -target xp -release -opengl desktop -no-angle -no-directwrite -nomake examples -nomake tests -mp -skip qt3d -skip qtactiveqt -skip qtandroidextras -skip qtcanvas3d -skip qtcharts -skip qtconnectivity -skip qtdatavis3d -skip qtdeclarative -skip qtgamepad -skip qtgraphicaleffects -skip qtimageformats -skip qtlocation -skip qtmacextras -skip qtmultimedia -skip qtpurchasing -skip qtquickcontrols -skip qtquickcontrols2 -skip qtscript -skip qtscxml -skip qtsensors -skip qtserialbus -skip qtserialport -skip qtsvg -skip qtvirtualkeyboard -skip qtwayland -skip qtwebchannel -skip qtwebengine -skip qtwebsockets -skip qtwebview -skip qtwinextras -skip qtx11extras -skip qtxmlpatterns
(根据自身需要调整参数)
运行命令nmake开始编译。。。静待若干分钟后编译完成。
接着运行
nmake install
nmake docs
nmake install_docs
0x04
最后一步是可选项,在-prefix指定的目录下,还原msvc-desktop.conf文件中的相关参数。比如我将QMAKE_LFLAGS参数还原,这样就不会强制Qt工程引入YY-Thunks,将决定权交给具体的工程。
但debug版本必须也要引入YY-Thunks,pro文件可以这么写
win32 {
CONFIG(debug, debug|release) {
OBJECTS += .../YY_Thunks_for_WinXP.obj
}
}