文章目录
一、编译前工作
1、源码下载
进入官网https://download.qt.io下载和解压源码,例如:
- 下载
qt-everywhere-opensource-src-5.15.10.zip
源码文件(说明: 建议下载.zip
的文件,不要下载.tar.gz
,因为有些版本.tar.gz
的文件解压后在windows平台编译时可能缺少头文件导致编译出错),并解压到目录E:/qt-everywhere-src-5.15.10
。 - 创建构建目录:
E:/qt-5.15.10-build
。(注意: 在configure.bat后会在build目录下自动生成一些源文件,进行nmake时会找不到而报错,此时就不要创建构建目录了,直接在源码目录进行configure.bat和nmake)。
2、安装编译工具
打开解压后的源码目录,例如:E:/qt-everywhere-opensource-src-5.15.10
,查看README
文件,需要安装以下工具:
(1)MinGW 或者 MSVC
在Windows上,有两个预构建环境可供选择:
MinGW
Microsoft Visual Studio(MSVC)
这两个环境互不兼容,无法混合,两种只能选择其一,它们的区别如下:
- 当项目使用了
MinGW
编译时,若想用一个MSVC
编译生成的库就会有问题,使用MinGW
编译项目的时候,项目中所使用的库也必须是要MinGW
编译的。 - 如果只是开发Window平台的软件时,最好用
Qt MSVC
组合,这样可以使用大量的第三方库,还有很多的构建指令(毕竟Windows上MSVC
才是王道)。
因此,这里选择使用MSVC
,可以进入官网https://visualstudio.microsoft.com/zh-hans/vs/下载Microsoft Visual Studio
,这里选择:
(2)Perl
可以根据README
文件中提供的链接下载安装ActivePerl
,也可以自行上Perl
官网安装并配置环境变量。
(3)Python
可以根据README
文件中提供的链接下载安装ActivePython
,也可以自行上Python
官网安装并配置环境变量。
(4)Ruby
可以根据README
文件中提供的链接下载安装RubyInstaller
,也可以自行上Ruby
官网安装并配置环境变量。
3、配置选项
打开Visual Sutdio的开发人员命令窗口(注意: 否则如果在普通的命令窗口在配置时,会提示:'nmake' 不是内部或外部命令,也不是可运行的程序 或批处理文件
)
- x86
- x64
进入构建目录,例如:E:\qt-5.15.10-build
,输入命令(命令选项说明): - x86
..\qt-everywhere-src-5.15.10\configure.bat -verbose -opensource -debug-and-release -shared -confirm-license -platform win32-msvc -make libs -opengl desktop -prefix D:\qt-5.15.10-windows-x86-msvc
- x64
..\qt-everywhere-src-5.15.10\configure.bat -verbose -opensource -debug-and-release -shared -confirm-license -platform win32-msvc -make libs -opengl desktop -prefix D:\qt-5.15.10-windows-x64-msvc
(1)带QtWebEngine
需要增加选项-webengine-proprietary-codecs
。
二、编译源码
配置成功后,内存最好大于4G以上,不然在某些情况下编译可能会不过,输入命令:nmake
,即进入编译流程,等候大约三四个小时,编译成功后,输入命令:nmake install
,即可把Qt库安装到目录:D:\qt-5.15.10-windows-x86-msvc
或D:\qt-5.15.10-windows-x64-msvc
。
三、环境配置
在安装成功后,为了方便开发过程中对库的依赖,最好配置下环境变量。
-
QTDIR
,例如:
-
QT_QPA_PLATFORM_PLUGIN_PATH
,例如:
-
QML2_IMPORT_PATH
,在通过Visual Studio创建Qt Quick Application
后运行时需要,否则会找不到依赖库,例如:
-
QT_PLUGIN_PATH
,配置Qt插件路径,例如:
否则在某些场景下如果有使用到插件时会运行出错,比如,在QML中使用虚拟键盘时,创建了InputPanel
控件,运行时会报错误:
qrc:/QtQuick/VirtualKeyboard/content/InputPanel.qml:125 Type Keyboard unavailable
qrc:/QtQuick/VirtualKeyboard/content/components/Keyboard.qml:36 module "QtQuick.VirtualKeyboard.Plugins" is not installed
四、绿色配置
Qt安装好后,不可以把它移动到其他目录,这是因为: Qt库在编译的时候将安装路径硬编码到库文件中。这个问题似乎不大好解决,可以通过命令查看到底由哪些路径:qmake -query
,结果为:
QT_SYSROOT:
QT_INSTALL_PREFIX:D:/qt-5.15.10-windows-x64-msvc
QT_INSTALL_ARCHDATA:D:/qt-5.15.10-windows-x64-msvc
QT_INSTALL_DATA:D:/qt-5.15.10-windows-x64-msvc
QT_INSTALL_DOCS:D:/qt-5.15.10-windows-x64-msvc/doc
QT_INSTALL_HEADERS:D:/qt-5.15.10-windows-x64-msvc/include
QT_INSTALL_LIBS:D:/qt-5.15.10-windows-x64-msvc/lib
QT_INSTALL_LIBEXECS:D:/qt-5.15.10-windows-x64-msvc/bin
QT_INSTALL_BINS:D:/qt-5.15.10-windows-x64-msvc/bin
QT_INSTALL_TESTS:D:/qt-5.15.10-windows-x64-msvc/tests
QT_INSTALL_PLUGINS:D:/qt-5.15.10-windows-x64-msvc/plugins
QT_INSTALL_IMPORTS:D:/qt-5.15.10-windows-x64-msvc/imports
QT_INSTALL_QML:D:/qt-5.15.10-windows-x64-msvc/qml
QT_INSTALL_TRANSLATIONS:D:/qt-5.15.10-windows-x64-msvc/translations
QT_INSTALL_CONFIGURATION:
QT_INSTALL_EXAMPLES:D:/qt-5.15.10-windows-x64-msvc/examples
QT_INSTALL_DEMOS:D:/qt-5.15.10-windows-x64-msvc/examples
QT_HOST_PREFIX:D:/qt-5.15.10-windows-x64-msvc
QT_HOST_DATA:D:/qt-5.15.10-windows-x64-msvc
QT_HOST_BINS:D:/qt-5.15.10-windows-x64-msvc/bin
QT_HOST_LIBS:D:/qt-5.15.10-windows-x64-msvc/lib
QMAKE_SPEC:win32-msvc
QMAKE_XSPEC:win32-msvc
QMAKE_VERSION:3.1
QT_VERSION:5.15.10
幸运的是,在Qt4中引入了一个新的机制:qt.conf
,这些路径可以被覆盖,该文件的大致写法如下:
[Paths]
Prefix = /some/path
...
如果将该qt.conf
文件置于qmake
(和其他Qt可执行文件)所在目录下,则Qt可执行文件的搜索路径将被qt.conf
中指定的路径所覆盖。其中Prefix是关键字段,它指定了Qt的根目录,其他很多路径都是根据这个路径来指定,有一些路径会有一个默认值,比如:lib
、bin
,还有一些则没有,比如:examples
、demos
。下面为参考模板:
[Paths]
Prefix = C:\Program Files\qt-5.15.10-windows-x64-msvc
Translations = translations
Plugins = plugins
Imports = imports
Examples = examples
Demos = demos
然而还有个问题,就是库每次更换一次新的路径,就需要手动改qt.conf
文件。可以编写脚本文件帮我们自动设置。
- Windows版本:update_path.bat
echo off
setlocal enabledelayedexpansion
:: 该文件应该放在Qt根目录下, 比如qmake.exe文件在C:\Qt\bin,则该文件应放在C:\Qt
:: 获取当前目录, 并且替换'\'为'/'
SET QTDIR=%~dp0
SET QTDIR=%QTDIR:\=/%
SET QTCONF_FILE="%QTDIR%bin\qt.conf"
if exist %QTCONF_FILE% (
DEL /q /f %QTCONF_FILE%
)
:: 写路径配置
echo [Paths]>> %QTCONF_FILE%
echo Prefix = %QTDIR%>> %QTCONF_FILE%
pause
- Linux版本:update_path.sh
#!/bin/bash
# 该文件应该放在Qt根目录下, 比如qmake文件在/opt/qt5/bin,则该文件应放在/opt/qt5
QTDIR=$(cd $(dirname $0); pwd)
QTCONF_FILE="$QTDIR/bin/qt.conf"
if [ -f "$QTCONF_FILE" ]
then
sudo rm -rf $QTCONF_FILE
fi
# 写路径配置
echo "[Paths]" >> $QTCONF_FILE
echo "Prefix = $QTDIR" >> $QTCONF_FILE
五、Visual Studio配置Qt开发
参考链接Visual Studio 常用设置。