欢迎光临
我们一直在努力

Qt 源码编译

1、背景

2、修改qmake.conf文件

3、准备configure的选项

./configure --help,将所有的configure的选项都罗列出来

3.1顶层安装目录

Qt 源码编译

-prefix 部署目录,make install的部署目录,若未指定则默认在/usr/local/qt-$QT_VERSION

-extprefix 安装目录,若未指定,则默认安装SYSROOT/PREFIX

-hostprefix 主机上运行的构建工具安装目录,,若未指定,则使用当前的构建目录EXTPREFIX

-external-hostbindir 当前主机的QT工具目录

3.2安装目录精调

Qt 源码编译

包括bin文件目录、头文件目录、库文件目录、架构依赖数据目录、插件目录、辅助程序目录、QML1导入目录、QML2导入目录、架构无关目录、文档目录、翻译(国际化)目录、QT系统配置目录、例程目录、单元测试目录、主机可执行目录、主机库目录、主机数据目录(qmake用的)

3.3 配置元

Qt 源码编译

3.4 编译选项

Qt 源码编译

Qt 源码编译

Qt 源码编译

这个小节,选项比较多,相对重要。

-opensource 和-commercial 是选择编译的是开源版本还是商业版本;

-confirm-license 自动认可证书

-release 、-debug -debug-and-release 默认是-release版本,即关闭调试。 -debug是开启调试的版本、-debug-and-release是编译得到release和debug连个版本

-optimize-debug(在调试构建中建立对调试友好的优化)、-optimize-size(优化按size而非speed)、-optimized-tools(在调试时也构建优化的主机工具)等优化相关的选项

-force-debug-info 在release选项启用时,创建符号文件。(符号表)

-developer-build 编译和连接qt而且加入开发者

-strip 剥离release版本不需要的符号

-gc-binaries 将函数和数据项放入各自的setction,并使能对未使用的段垃圾回收链接

-force-asserts 在release 构建中也使能断言assert功能

-developer-build 编译和连接QT是为了开发QT自身

-shared 编译成动态QT库(共享),软件比较小

-static 编译成静态库

-framework 构建QT框架包(Apple only)

-platform <target> 选择主机mkspec

-xplatform <target> 当使用交叉编译时选择目标mkspec

-device <name> 要交叉编译设备名

-device-option <key=value> 给设备mkspec 添加选项

-appstore-compliant 禁用在app store中不允许用的代码,Android ios/ tvos/watchos

-qtnamespace <name> 将所有QT 库代码封装在指定命名空间内

-qtlibinfix <infix> 给所有的libQt58.so重命名,添加中缀libQt5*<infix>.so

-testcocoon 使用TestCocoon代码覆盖工具进行测试

-gcov 使用GCov代码覆盖工具进行测试

-trace [backend] 使能tracepoints进行测试

-sanitize

-c++std <edition> 选择C++ 标准版本 [c++1z/c++14/c++11]

-sse2 用SSE2指令集

-sse3/-ssse3/-sse4.1/-sse4.2/-avx/-avx2/-avx512 各类指令集

-mips_dsp/-mips_dspr2 用MIPS DSP/rev2 指令集

-qreal <type> 指定qreal指定的类型,默认是double类型

-R <string> 添加一个显式运行库路径到Qt库。支持LIBDIR的相对目录

-rpath 链接Qt库是,将lIBDIR作为运行时库的目录。相当于-R LIBDIR

-reduce-exports 减少输出符号的数量

-reduce-relocations 减少重定向的数目[Unix only]

-plugin-manifests 将声明嵌入插件[Windows only]

-static-runtime

-pch 使用预编译头文件

-ltcg 使用链接时间代码生成器

-use-gold-linker 使用GNU gold链接器

-incredibuild-xge

-ccache 使用编译器缓存 [unix only]

-make-tool <tool> 用指定<tool>去构建qmake [Windows only]

-mp 使用多核处理器进行编译

-warnings-are-errors 将警告当做错误来对待

-silent 减少构建是的输出log

3.5 编译环境

Qt 源码编译

-sysroot <dir> 设置目标sysroot目录

-gcc-sysroot 设置了sysroot,则传递sysroot给编译器

-pkg-config 使用pkg-config

-D <string> 添加显示的宏定义给预编译器

-I <string> 添加显示的头文件包含目录

-L <string> 添加显示的库文件

3.6 组件选择

Qt 源码编译

-skip <repo> 编译是不包括整个代码库

-make <part> 将<part>添加到要构建的列表表中

-nomake <part> 将<part>不涵括在要构建的列表中

-compile-examples 例程是否编译

-gui 构建QT GUi模块和其依赖

-widgets 构建Qt Widgets模块及其依赖

-no-dbus 不构建Qt D-Bus模块

-dbus-linked 构建Qt D-Bus模块并链接成libdbus-1

-dubs-runtime 构建Qt D-Bus且动态加载libdbus-1

-accessibility 使能可访问

下面的都是Qt里绑定的第三方库,默认自动检测是failed,不构建进QT库的。

3.7 第三方库

3.7.1 核心选择

Qt 源码编译

-doubleconversion 选择使用双重转换库,可选的有system、qt、no

-glib 使能支持Glib库,默认时no, auto on Unix

-eventfd 使能eventfd支持

-inotify 使能inoftify支持

-icony 使能iconv(3)支持[可选的有posix/sun/gnu/no](Unix only)

-icu 使能ICU支持

-pcre 选择使用libpcre2类型,可选的有system和qt

-pps 使能PPS支持[Unix only]

-zlib 选择使用zlib类型,可选的有system和qt的;如--zilib=qt

Logging backends: 日志后端支持

Unix可选Journald、syslog支持

3.7.2 网络选择

Qt 源码编译

-ssl 使能任一ssl支持方法

-no-openssl 不使用openssl[Apple和WinRT 默认选择]

-openssl-linked 使用openssl且链接如libssl

-openssl-runtime 使用openssl且动态加载libssl

-securetransport 使用安全传输(Apple)

-sctp 使能SCTP支持(SCTP协议)

-libproxy 使能代理库

-system-proxies 默认使用系统网络代理

3.7.3 GUI、printing、widget 选择

Qt 源码编译

Qt 源码编译

-cups 启用CUPS支持(Unix only)

-fontconfig 启用字体配置支持

-freetype 选择使用的FreeType类型(FreeType库是一个完全免费(开源)的、高质量的且可移植的字体引擎),可选的有system、qt、no

-harfbuzz 选择使用HarfBuzz-NG,harfbuzz是一个开源的text opentype layout 引擎,可选的有system、qt、no

-gtk 启用GTK平台主体支持

-lgmon

-on-opengl 不启用OpenGL

-opengl <api> 启用OpenGL,具体支持的api有哪些

-pengls3 启用OpenGL ES3.x替代ES 2.x

-egl 启用EGL

-angle

-combined-angle-lib

-xcb-xlib 启用Xcb-Xlib支持

平台后端:

-direct2d 启用Direct2D (Windows only)

-directfb 启用DirectFB (Unix only)

-eglfs 启用EGLFS(Android and Windows)

-gbm 启用GBM后端

-kms 启用KMS后端

-linuxfb 启用Linux 帧缓冲

-mirclient 启用Mir 客户端

-xcb 启用X11支持,选择使用xcb-*库,可选包括system、qt、no

输入后端:

-libudev 启用udev支持

-evdev 启用evdev支持

-imf 启用IMF支持(QNX only)

-libinput 启用libinput库支持,触摸屏

-mtdev 启用mtdev支持, 多点触控

-tslib 启用tslib支持, tslib触摸屏驱动扩展

-xcb-xinput 启用Xinput2支持,多点触控支持,用于桌面

-xkbcommon 启用键位支持

图片格式:

-gif 启用GIF读取支持

-ico 启用ICO支持

-libpng 选择使用libpng方式,可选的有system/qt/no

-libjpeg 选择使用libjpeg方式,可选的有systm/qt/no

3.7.4 数据库选项

Qt 源码编译

-sql-<driver> 使能SQl <driver>插件

-sqlite 选择sqlite3 方式,有system和qt的

3.8 3D选项 Qt 源码编译

-assimp 选择要使用的assimp 库[可选的是system/qt/no]

-qt3d-profile-jobs -qt3d-profile-gl 使能jobs 和OpenGL 规范

-qt3d-simd 选择SIMD支持的等级[可选的是no/sse2/avx2]

-qt3d-render 启用Qt3D渲染方面

-qt3d-input 启用QT3D输入方面

-qt3d-logic 启用QT3D逻辑方面

-qt3d-extras 启用QT3D额外方面

-qt3d-animation 启用QT3D动画方面

3.9 更多图片格式选项 Qt 源码编译

-jasper 启用JasPer 库来支持JPEG-2000

-mng 启用MNG的支持

-tiff 启用tiff的支持有system、qt、no的选择

-webp 启用WEBP的支持

3.10 多媒体选项
Qt 源码编译

-pulseaudio 启用pluse音频支持

-alsa 启用ALSA(高级Linux声音架构)的支持

-no-gstreamer 不启用GStreamer的支持

-gstreamer [version] 启用GStreamer

-mediaplayer-backend <name> 选择多媒体后端

-evr 在DirectShow和WMF中启用EVR

3.11 Web引擎选项

Qt 源码编译

4、写脚本用以生成Makefile

正点原子例子

./configure -prefix /home/alientek/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/alientek/tslib-1.21/arm-tslib/include \ -L/home/alientek/tslib-1.21/arm-tslib/lib \ -recheck-all

解释说明:

部署目录是/home/alientek/qt-everywhere-src-5.12.9/arm-qt

开源版本

自动更新证书

编译成release版本

剥离release版本时不需要的符号

编译成动态链接库

板子目标平台是linux-arm-gnueabi-g++

优化qmake

c++标准是c++11

rpath=no

使用预编译头文件

构建不包括qt3d模块、qtcanvas3d模块、qtandroidextras模块....

将libs和examples加入构建清单

将tools和tests不加入构建清单

构建时加入gui模块及其依赖

构建时加入widgets模块及其依赖

构建Qt D-Bus且动态加载libdbus-1

glib选择no

iconv(3)选择no

libpcre2选择qt

zlib选择qt

不使用openssl

字库freetype选择qt

布局harfbuzz选择qt

不启用opengl

linux 帧缓冲显示

xcb多点触控选择no

启用tslib触摸驱动

png、jpeg库选择qt

sqlite选择qt

数据库插件选择sql-sqlite

好看tslib的头文件和库文件

丢弃所有缓冲配置测试

4.1 借鉴后修改自己的脚本

4.2 碰上的问题

4.2.1 Windows下的回车换行和Unix下的换行问题

在vim上粗看不出来,是因为vim会自动识别换行方式,提示用dos方式打开,就是换行是Windows下的换行,^M&。

Windows下的换行符是\r\n,dos下可以识别\n,linux/unix下的换行符是\n.

查看的方式:

1、vim打开提示[dos]方式

2、vim -b 二进制方式打开可见^M$

修改的方式

1、使用dos2unix命令

dos2unix file1 file2即可完成

2、vim打开,用ff=unix

Qt 源码编译

5、编译+安装

make && sudo make install

Qt 源码编译

5.1 编译中碰到的问题

Python not found. Building QtQml requires Python.

解决方法参考 关于qt5.12.9含QML交叉编译移植(Building QtQml requires Python.)问题解决办法_Leehowuxi的博客-CSDN博客_qml交叉编译在移植QT5.12.9源码时,编译源码后,进行make install ,但是出现了问题:Python not found.Building QtQml requires Python.意味着缺失或找不到python资源包解决办法:1.未装Python资源包;sudo apt install python3.82.资源包未获取到;找到资源包并放置在/usr/bin/python目录下which python3sudo cp -r /usr/binpython3 /usr/bin/pyQt 源码编译https://blog.csdn.net/qq_42259389/article/details/118245070

sudo apt install python3.8

sudo unlink /usr/bin/python
sudo ln -s /usr/bin/python3.8 /usr/bin/python

注意:版本和路径必须对

6、移植Qt到现成文件系统

6.1 打包成tar.bz2格式拷贝如U盘

tar -jcf ./arm-qt.tar.bz2 arm-qt

将其拷贝到U盘中

6.2 挂载U盘到mnt,解压库文件到/usr/lib 目录

mount /dev/sda1 /mnt ##挂载

tar xf arm-qt.tar.bz2 -C /usr/lib ##解压

6.3 配置环境变量

编译/etc/profile,在文末添加环境变量

source /etc/profile #使能profile 生效

  • 海报
海报图正在生成中...
赞(0) 打赏
声明:
1、本博客不从事任何主机及服务器租赁业务,不参与任何交易,也绝非中介。博客内容仅记录博主个人感兴趣的服务器测评结果及一些服务器相关的优惠活动,信息均摘自网络或来自服务商主动提供;所以对本博客提及的内容不作直接、间接、法定、约定的保证,博客内容也不具备任何参考价值及引导作用,访问者需自行甄别。
2、访问本博客请务必遵守有关互联网的相关法律、规定与规则;不能利用本博客所提及的内容从事任何违法、违规操作;否则造成的一切后果由访问者自行承担。
3、未成年人及不能独立承担法律责任的个人及群体请勿访问本博客。
4、一旦您访问本博客,即表示您已经知晓并接受了以上声明通告。
文章名称:《Qt 源码编译》
文章链接:https://www.456zj.com/36501.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址