Qt最新版5.14在Windows环境静态编译安装和部署的完整过程(VS 2017/VS 2019)
admin • 2020 年 01 月 05 日
为什么要静态编译
在默认情况下,用QtCreator编译程序时,使用的是动态编译。编译好的程序在运行时需要另外加上相应的Qt库文件,一大堆dll文件。如果想将生成的程序连同所需要的库一起完整地打包成一个可执行程序,那就需要使用静态编译。Qt官方不提供静态编译好的安装包,所以需要我们在自己的电脑上静态编译。而且exe文件会比动态编译的要小上很多。编译安装准备
1.源码下载
Qt最新版5.14.0的源码下载地址:2.工具准备
ActivePerl
ActivePerl下载地址:Download and Install Perl: ActivePerl | ActiveState
选择最新的版本 5.28,然后注册,再下载,我安装的是5.26版本。
安装时默认会添加ActivePerl到环境变量。
测试添加是否成功:C:\Users\bohe>perl -v
This is perl 5, version 26, subversion 1 (v5.26.1) built for MSWin32-x64-multi-thread
(with 1 registered patch, see perl -V for more detail)
Copyright 1987-2017, Larry Wall
Binary build 2601 [404865] provided by ActiveState http://www.ActiveState.com
Built Dec 11 2017 12:23:25
Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.
Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl". If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.
Python
Python需要安装python2(python2.7.5或者更新的2.7版本)和Python3(我安装的Python3.7.6)。
python下载地址C:\Users\bohe>python
Python 2.7.5 (default, May 15 2013, 22:44:16) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()
C:\Users\bohe>python3
Python 3.7.6 (tags/v3.7.6:43364a7ae0, Dec 19 2019, 01:54:44) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()
C:\Users\bohe>
缺少python2就会报WARNING: Python version 2 (2.7.5 or later) is required to build QtWebEngine. WARNING: 64-bit cross-building or native toolchain is required to build QtWebEngine.
Ruby
Ruby下载地址:C:\Users\bohe>ruby -v
ruby 2.6.5p114 (2019-10-01 revision 67812) [x64-mingw32]
LLVM
LLVM下载地址:Either ensure that llvm-config is in your PATH environment variable, or set LLVM_INSTALL_DIR to the location of your llvm installation. On Linux systems, you may be able to install libclang by installing the libclang-dev or libclang-devel package, depending on your distribution. On macOS, you can use Homebrew's llvm package. On Windows, you must set LLVM_INSTALL_DIR to the installation path.
错误
编译环境选择
在Windows上,有两个预构建环境可供选择:一个是MinGW,另一个是Microsoft Visual Studio(MSVC)。这两个环境不兼容,无法混合。你必须选择一个。
这两者的区别如下:
当你的项目使用MinGW编译的使用,想要用一个MSVC编译生成的库时就会有问题。使用MinGW编译项目的时候,所使用的Lib也要是MinGW编译的。如果你只是开发Window平台的软件时,最好用Qt MSVC组合,这样可以使用大量的第三方lib,还有很多的构建指令,毕竟window上MSVC才是王道。
我选择MSVC,打开安装VS时自带安装的MSCV:Developer Command Prompt for VS 2019(或者是VS 2017的开发人员命令提示符)。
编译
在D盘新建一个目录用来存放编译好的内容:D:qt(根据需要自己更改)
在Developer Command Prompt for VS 2019(或VS 2017的开发人员命令提示符的命令行)里进入Qt源代码目录:**********************************************************************
** Visual Studio 2019 Developer Command Prompt v16.4.2
** Copyright (c) 2019 Microsoft Corporation
**********************************************************************
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community>cd /
C:\>D:
D:\>cd qt-everywhere-src-5.14.0
D:\qt-everywhere-src-5.14.0>
修改源码里的qtbasemkspecscommonmsvc-desktop.conf文件
修改-MD为-MTQMAKE_CFLAGS_RELEASE = $$QMAKE_CFLAGS_OPTIMIZE -MD
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_OPTIMIZE -Zi -MD
QMAKE_CFLAGS_DEBUG = -Zi -MDd
改为QMAKE_CFLAGS_RELEASE = $$QMAKE_CFLAGS_OPTIMIZE -MT
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_OPTIMIZE -Zi -MT
QMAKE_CFLAGS_DEBUG = -Zi -MTd
D的意思是动态编译(dynamic),T的意思是静态编译(static)。
这一步官方教程没有要求,但其他人的很多教程里都有写,我就加上了
配置config文件configure.bat -static -prefix "D:\qt" -confirm-license -opensource -debug-and-release -platform win32-msvc -nomake examples -nomake tests -plugin-sql-sqlite -plugin-sql-odbc -qt-zlib -qt-libpng -qt-libjpeg -opengl desktop -mp
具体含义如下:configure.bat
-static //指明是静态编译
-prefix "D:\qt" //指明安装的目录
-confirm-license -opensource //指明是开源版本的qt
-debug-and-release //指明需要debug版和release版,可以单独选择release版
-platform win32-msvc //指明使用msvc编译
-nomake examples -nomake tests //不编译样例
-plugin-sql-sqlite -plugin-sql-odbc -qt-zlib -qt-libpng -qt-libjpeg //可选插件
-opengl desktop
-mp //多核编译
make
上面提到过在Windows上,有两个预构建环境可供选择:一个是MinGW,另一个是Microsoft Visual Studio(MSVC)。
我选择的是msvc环境,使用命令nmake即可进行编译。nmake
但是MSVC自带的nmake没有多线程编译功能,有一个替代功能的软件jom可以进行nmake的多线程编译,即不用nmake命令,使用jom命令代替nmake。
jom的下载地址:D:\jom_1_1_3\jom.exe j8
j8代表使用8核,编译过程需要几个小时,make完成后源码和编译后的共有17.1G大小。
构建完后清理一下中间文件: jom.exe clean(使用nmake构建的话使用:nmake clean)
make install
因为jom是多线程的运行,但我需要用电脑,所以我使用nmake单线程install:nmake install
多线程install使用:jom install
安装完成后,QT的文件夹有2.98G的大小。
添加到Qt Creator
这里需要说明一下,Qt Creator现在已经不能直接下载最新版本,需要下载在线安装程序:
②新建一个构建套件,Qt版本选择刚添加的静态版,其他选项与动态版相同即可。
成功:
一个exe的大小是11M,包括了所有需要的内容。
小结
Windows环境静态编译安装和部署Qt总体来说还是比较简单,但是会由于缺少各种软件、环境变量等导致不能正常进行,很多教程都没有提需要同时安装python2和python3,同时,也没有说需要安装LLVM这个软件,没有LLVM这个软件静态编译安装和部署无法完成,直接会报错。