Windows 下 Qt Installer Framework 源码编译
三个大步骤:
- Qt 源码静态编译
- 配置静态库
- Qt Installer Framework 源码编译
1. Qt 静态编译
通过安装器安装的 Qt ,只有动态链接库版本,不适用于 Qt Installer Framework 的编译。需要自己从源码构建出静态库。
以下步骤完全参考 Qt Wiki,英文过关的可以直接阅读原文。
1.1 编译环境
- Windows 10
- Windows PowerShell(默认随系统安装)
- Qt 5.15.2 MinGW 8.1.0 64-bit(安装器有对应选项)
- 下载安装 7-zip
- Perl 5.12+ (http://www.activestate.com/activeperl/)
- Python 2.7+ (http://www.activestate.com/activepython/)
- Ruby 1.9.3+ (http://rubyinstaller.org/)
1.2 下载并修改 PowerShell 脚本
下载 qt-windows10-static-build.ps1 这个 PowerShell 脚本,具体的构建过程全在脚本里。
1.2.1 打开脚本文件,并定位到
1 | $QtStaticDir = "C:\Qt\Static", # NO TRAILING SLASH |
所在行。此变量表示编译输出目录,改成你的自定义目录。
1.2.2 定位到
1 | $GccList = @(Get-ChildItem -Path C:\Qt\Tools\mingw*\bin\gcc.exe |
所在行,将 Path
值改为你的 Qt 安装目录下的相应路径。
1.2.3 定位到
1 | cmd /c "configure.bat |
所在行:
- 将
-skip qtdeclarative
选项删掉,Qt Installer Framework 依赖 Qml 库; - 在
-qt-webp
选项后边添加-qt-tiff
选项,Qt Installer Framework 同样依赖 tiff 图片格式库。
1.3 编译
右键 PowerShell 脚本,弹出菜单里选择 “使用 PowerShell 运行”,编译开始。
耗时较长(数小时计),耐心等待。
编译完成后,在自定义的输出目录下会出现一个 $QT_VERSION
命名的文件夹,在 $QT_VERSION\lib
目录下可以看到所有的 .a 文件。
2. Qt Creator 配置 Qt 静态库。
以下步骤完全参考 Qt Wiki,英文过关的可以直接阅读原文。
- 打开 Qt Creator
- 工具菜单->选项
- 选中左边 Kits 选项页,选择 Qt Versions 标签页。
- 点击添加按钮,选中上一步编译出的 qmake.exe 文件,即
$QT_VERSION\bin\qmake.exe
。可以看到 Manual 树下多了一行,可以选中它,给它取一个更有识别度的版本名称,比如Qt %{Qt:Version} MinGW Static 64bit
。 - 点击应用按钮。
- 选择 Kits 标签页。
- Manual 树下应该会自动添加一行,对应上边步骤的 Qt 版本(如果没有自动添加,可以点击 Add 按钮,选中新行,点击下边列表的名称一行右边图标,下拉菜单里选择上一步骤 Qt 版本,完成手动添加。)。
- 修改列表中 Compiler 一栏,将 C/C++ 编译器分别改为 MinGW 8.1.0 64-bit for C、MinGW 8.1.0 64-bit for C++。
3. Qt Creator 中编译 Qt Installer Framework
下载 QtIFW 源码:https://github.com/LiangZuoting/installer-framework.git
Qt Creator 中通过源码根目录下 installerfw.pro
文件打开工程。
打开 installerbase.rc
文件,将 13 行
1 | VALUE "FileVersion", IFW_VERSION_STR_WIN32 |
改为
1 | VALUE "FileVersion", "4.0.1" |
具体的版本号依你自己情况而定,且要记得更新版本号时同步修改此处。
这是一个已知 BUG,一直没有修复。
然后就可以编译了。数分钟后,在 QtIFW 源码根目录下会多一个 bin 目录,里边是输出文件。
参考
- Building a static Qt for Windows using MinGW: https://wiki.qt.io/Building_a_static_Qt_for_Windows_using_MinGW