编译Qt源码,首先就获取源码,从Qt官方网站download.qt.io/archive/qt/获取源码。将其解压缩,完成后如右图所示:
从目录结构来观察,源码结构以模块形式高度界定。Qt的各个模块都可以单独编译linux qt环境,其实通常使用最多的是整体编译。在使用工具(比如buildroot)制做嵌入式linux根文件系统时,对Qt部份是手动编译的(暂不清楚上面的完善细节)
在上图中,有一个qtbase目录,该目录是Qt的基础模块目录,该目录下同样有configure文件(在源码目录下也有一个configure配置文件,这两个文件不一样)
在Qt源码目录下执行:
./configure --help
会复印出帮助信息,在/qtbase目录下使用上述命令同样会复印帮助信息,只是在此处复印出的信息比在源码目录下使用confiigure--help命令复印出的帮助信息少。
当我们在Qt源码目录下执行./configure命令时,可以配置整体编译方案,我们则可以在此处设置想要编译建立的参数和模块。
在/qtbase目录下,执行./configure命令时,配置的是在该目录下的Qt基本模块。从源码目录结构,可以晓得在qtbase模块下包含许多子模块:
其中包含:core、network、sql、widget等。
只编译建立qtbase,开发运行常见窗体应用是可以的
mkspecs目录
在qtbase目录下,储存了多个目录linux qt环境,如右图所示:
由于Qt是跨平台的,在该目录下则储存了许多与具体平台相关的目录,目录的名称则是以具体构架来命名,且目录中储存了两个文件:
#
# qmake configuration for building with aarch64-linux-gnu-g++
#
MAKEFILE_GENERATOR = UNIX
CONFIG += incremental
QMAKE_INCREMENTAL_STYLE = sublib
include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)
# modifications to g++.conf
QMAKE_CC = aarch64-linux-gnu-gcc
QMAKE_CXX = aarch64-linux-gnu-g++
QMAKE_LINK = aarch64-linux-gnu-g++
QMAKE_LINK_SHLIB = aarch64-linux-gnu-g++
# modifications to linux.conf
QMAKE_AR = aarch64-linux-gnu-ar cqs
QMAKE_OBJCOPY = aarch64-linux-gnu-objcopy
QMAKE_NM = aarch64-linux-gnu-nm -P
QMAKE_STRIP = aarch64-linux-gnu-strip
load(qt_config)
qmake.conf是一个重要的文件,在针对具体平台编译建立源码时,可能须要更改该文件下的内容:
在上述图片中,等号左边表示具体的编译重构工具名称。须要提早安装对应的编译套件且将她们添加到环境变量中(假如没有添加,可以以绝对路径来描述)。诸如,倘若是在linux平台下,且将编译器添加到了环境变量中,可以使用编译器名称加上v参数选项查看编译器信息,此处以交叉编译器aarch64-linux-gnu为例:
编译建立qtbase
本小节以在ubuntu系统下,交叉编译Arm64平台的Qt版本为目标。记录qtbase的编译建立步骤。
交叉编译器为:gcc-linara-6.3.1-2017.05-x86_64_aarch64-linux-gnu
(1)打算好交叉编译工具后,将交叉编译器的路径添加到ubuntu环境变量中。参见一文
(2)在源码目录下使用cdqtbase将终端切换到qtbase目录下。
(3)查看/qtbase/mkspecs/linux-aarch64-gnu-g++/qmake.conf文件内容。编译器一栏所填写的命令红旗linux下载,须要与交叉编译器套件名称一样。小生的交叉编译器套件如右图所示:
(经对比,qmake.conf文件中交叉编译器名称与上图所示名称一样,故此处不用更改qmake.conf文件)
(4)在终端使用下述命令:
./configure
-prefix 编译安装的目录路径
-xplatform linux-aarch64-gnu-g++
-no-opengl
-opensource
-confirm-license
-release
-strip
-shared
-c++std c++11
--sqlite=qt
-recheck-all
(注:可以将上述内容写成脚本,直接在终端下运行即可)
其他参数涵义可以使用./configure-help复印出帮助信息查看。
(5)使用make-j12编译建立qtbase。(-j12表示同时容许的任务数,计算机性能好,就指定12或更高。计算机性能弱就指定低数值或不指定-j参数)
注:依照编译建立环境的硬件配置,整个编译建立过程可能会须要几分钟甚至几十分钟。
(6)编译完成后,在终端使用makeinstall命令将编译成功后的文件安装到-prefix参数指定的路径下。
安装完成后,会在-prefix参数指定的路径下手动创建几个目录,如右图所示:
在上述过程中,我们早已编译建立且安装好了qtbase,假如在开发中,还想降低其他的组件模块,我们可以直接到模块对应的目录路径下编译即可。诸如,假如想编译建立qtcharts模块,可以根据如下步骤进行:
(1)切换到qtcharts目录路径下,打开终端。
(2)用在qtbase编译出的qmake工具来配置(这个qmake会手动沿用qtbase交叉编译时的配置),qmake工具坐落-prefix参数指定的路径下的bin目录中:
编译安装的目录路径/bin/qamke
(3)使用make-j12编译建立。
(4)使用makeinstall安装。
完整编译建立Qt源码
完整编译Qt源码指的是在Qt源码路径下进行编译,使用configure对Qt进行编译配置时指定须要编译的模块。
完整编译建立步骤如下:
(1)与上述编译qtbase一样,须要确保打算好了交叉编译器环境,且配置好具体目标平台下的qmake配置文件,之后在Qt源码目录下打开终端。
(2)使用下述命令配置Qt源码:
#! /bin/sh
./configure -prefix /home/Qt/qt-everywhere-src-5.12.9/arm-qt
-opensource
-confirm-license
-release
-strip
-shared
-xplatform linux-arm-gnueabi-g++
-optimized-qmake
-c++std c++11
--rpath=no
-pch
-skip qt3d
-skip qtactiveqt
-skip qtandroidextras
-skip qtcanvas3d
-skip qtconnectivity
-skip qtdatavis3d
-skip qtdoc
-skip qtgamepad
-skip qtlocation
-skip qtmacextras
-skip qtnetworkauth
-skip qtpurchasing
-skip qtremoteobjects
-skip qtscript
-skip qtscxml
-skip qtsensors
-skip qtspeech
-skip qtsvg
-skip qttools
-skip qttranslations
-skip qtwayland
-skip qtwebengine
-skip qtwebview
-skip qtwinextras
-skip qtx11extras
-skip qtxmlpatterns
-make libs
-make examples
-nomake tools -nomake tests
-gui
-widgets
-dbus-runtime
--glib=no
--iconv=no
--pcre=qt
--zlib=qt
-no-openssl
--freetype=qt
--harfbuzz=qt -no-opengl -linuxfb
--xcb=no -tslib
--libpng=qt
--libjpeg=qt
--sqlite=qt
-plugin-sql-sqlite
-I/home/Qt/tslib-1.21/arm-tslib/include
-L/home/Qt/tslib-1.21/arm-tslib/lib
-recheck-all
上述的配置文本,可通过./configure-help查看对应的意思。
参考链接:doc.qt.io/qt-5/configure-options.html
上述配置跳过了几个Qt模块linux 命令,且使用linuxfb作为显示平台插件,为ARM32编译Qt跨平台开发环境。
(3)在终端使用make-j12编译建立Qt源码。
(4)在终端使用makeinstalll命令将编译成功后的文件安装到-prefix参数指定的路径下。
文章评论