Windows下MinGW编译静态Qt5 I

译自 http://wiki.qt.io/Building_a_static_Qt_for_Windows_using_MingW。非专业翻译,掺杂个人理解,有删减。
注:仅支持Qt5,Win7或更高版本的系统。

WHY

qt.io下载的Qt安装包for windows是动态链接的,安装过程中一并安装了DLL文件。在动态环境下生成的Qt应用程序将动态调用这些DLL文件。

在开发、调试过程采用动态库真真是极好的,因为一切都是现成的,可以直接享用。
然而,如果现在要把程序部署到没有安装Qt的系统中,情况就复杂了——必须把程序调用的DLL一股脑部署过去。就算你祭出经典的 DLL Dependency Walker神器,也不一定能分析出程序依赖的所有库文件。(译注:我都是用最笨的方法,反复地尝试,把缺失的dll文件拷贝过去,直到程序能正常工作。如果你有更好的办法,请告诉我)
所以,部署静态版本的应用程序更省事。
而构建应用程序的静态版,需要:Qt动态环境 + Qt静态版本。

下面将介绍如何用Windows PowerShell脚本,自动下载、构建和安装Qt静态开发环境。
注意:Qt4及更早的版本在Windows下构建、安装静态版本存在点问题。而Qt5对Windows下静态编译的支持度更好,本文即是基于Qt5。

MinGW vs. MSVC

Qt安装包有MinGW版和Microsoft Visual Studio版,它们互相不兼容、不可混用。择一而用之。
本文讲述如何用MinGW编译静态版Qt。如果用MSVC,可以参考下述的大致思路,但操作方法断然是有差别的。

目标环境

要在Windows下开发Qt程序,且后续部署到Windows平台,推荐按以下方式搭建开发环境:
  • 动态版,安装路径C:\Qt
  • 静态版,安装路径C:\Qt\Static。安装方法遵循本文描述的步骤。
动态版用来开发和调试。包括Qt命令行工具,GUI工具如Qt Creator, Assistant, Linguist等。
开发调试完成后,用静态版进行部署。静态版只有命令行工具。至于为什么不构建静态版的GUI工具,理由至少有二:
一是部署应用程序的工作通常都是用脚本自动完成的,不需要GUI工具;
二是构建Qt Creator静态版不很可行,因为插件(plugins)不支持静态环境。

限制

静态编译应用程序让部署更简单,但也存在一些限制。记得预先检查是否符合这些限制条件:
  1. 许可问题(略)
  2. 静态编译的程序不支持动态模块化方法。 //不支持自定义DLL?。。。
另外还要注意:
  • 静态版的可执行文件比动态版体积大。不过由于动态版要同时部署DLL,所以总的体积来说,静态版更小。
  • 静态版将解除对Qt或MinGW的DLL依赖。但不能解除对Windows DLL的依赖,比如kernel32.dll, user32.dll(略)

准备工作

1 安装Qt动态版

从 qt.io下载"Qt 5.5.0 for Windows 32-bit (MinGW 4.9.2, 959MB)"。你可以选择其他版本,但建议:待编译的源代码版本号=安装包版本号。
安装到默认路径(C:),安装时勾选Tools下面的MinGW选项。

2 Windows PowerShell


要求安装PowerShell 3.0或更高的版本。Win8已自带,Win7从 微软下载安装(译注:打开后按照页面指引选择版本)。WinXP、Vista不支持PowerShell 3.0,因此本文的脚本不支持Win7以前的版本。

3 7-Zip

确保已 下载安装7-Zip。

构建Qt静态环境

1 下载、运行,搞定

下载并执行脚本windows-build-qt-static.ps1。
上述链接从一个小型开源工程 QtIMovie的git库直接获取脚本。你可以瞅一眼这个工程,里面包含一些构建脚本示例。
右键单击 windows-build-qt-static.ps1,选择“使用PowerShell运行”。
脚本将会执行以下步骤:
  1. 下载Qt源代码
  2. 用动态版本中的MinGW构建Qt静态版本。构建库和命令行工具(qmake, moc, uic, lupdate, lrelease等)。
  3. 默认安装静态版Qt到C:\Qt\Static。
Qt 框架 复杂,代码量相当大,脚本的执行可能需要若干小时,请耐心等待。

2 命令行运行

除了右键“使用PowerShell运行”,也可以从PowerShell启动windows-build-qt-static.ps1:
windows-build-qt-static.ps1  [-QtSrcUrl  url] [-QtStaticDir  directory] [-QtVersion  string] [-MingwDir  directory] [-NoPause]


3 命令行参数说明

-QtSrcUrl  url
指定Qt源文件URL。脚本默认包含最新版本的URL硬编码。
也可以直接修改脚本:
$QtSrcUrl = "http://download.qt-project.org/official_releases/qt/5.5/5.5.0/single/qt-everywhere-opensource-src-5.5.0.7z",

-QtStaticDir  directory
指定安装Qt静态环境的根目录。默认为C。

-QtVersion  string
指定Qt版本号。默认情况下,脚本会从Qt源文件名称中获取版本号。假如真有辣么一天Qt源文件名的格式变了,你可能得显式指定这个参数值。


-MingwDir  directory
指定MinGW环境的根目录。默认使用已安装的Qt中自带的MinGW。

-NoPause
执行结束后不等待用户 回车

你可能感兴趣的:(Qt)