QT - 配置嵌入式Linux设备

QT - 配置嵌入式Linux设备

为给定设备构建Qt需要工具链和sysroot。此外,某些设备需要供应商特定的适应代码才能支持EGL和OpenGL ES 2.0。这与非加速平台(例如使用LinuxFB插件的平台)无关,后者仅用于基于软件的渲染。

所述qtbase/mkspecs/devices目录包含多个设备的配置和图形适应代码。例如,linux-rasp-pi2-g++mkspec包含构建设置,例如Raspberry Pi 2设备的最佳编译器和链接器标志。mkspec还包含有关eglfs挂钩的实现(特定于供应商的适应代码)或对适当的eglfs设备集成插件的引用的信息。通过配置configure工具的-device参数选择设备。该参数之后的名称必须至少部分地与devices下的子目录之一匹配。

以下是Raspberry Pi 2的示例配置。对于大多数嵌入式Linux板,configure命令看起来类似:

./configure -release -opengl es2 -device linux-rasp-pi2-g++ -device-option CROSS_COMPILE=$TOOLCHAIN/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf- -sysroot $ROOTFS -prefix /usr/local/qt5

最重要的参数是-device-sysroot。通过指定-sysrootconfigure功能检测测试所使用的包含文件和库以及Qt本身均从指定位置获取,而不是从主机PC的标准位置获取。因此,在主机上安装开发包没有任何意义。例如,要获得libinput支持,libinput在主机环境中安装开发标头和库是不够的或不必要的。相反,目标体系结构(如ARM)的标头和库必须存在于中sysroot

pkg-config执行交叉编译时也受支持。configure自动设置PKG_CONFIG_LIBDIRpkg-config基于sysroot而不是基于主机进行报表编译器和链接器设置。通常无需任何进一步调整即可正常运行。但是,必须在运行configure之前为主机反设置('unset')诸如PKG_CONFIG_PATH之类的环境变量。否则,Qt构建可能会尝试使用主机系统中不适当的标头和库。

指定-sysroot结果将导致在--sysroot调用编译器时自动设置参数。在某些情况下,这是不希望的,可以通过传递-no-gcc-sysroot给来禁用configure

-prefix-extprefix-hostprefix控制Qt构建的预期目标目录。在上面的示例中,期望将Qt的ARM版本放置在/usr/local/qt5目标设备上。请注意,运行make install不会将任何内容部署到设备。相反,该install步骤针对的是指定的目录extprefix,默认目录为sysroot+ prefix,因此是可选的。但是,在许多情况下,“污染” sysroot是不可取的,因此指定-extprefix变得很重要。最后,-hostprefix允许将目标工具(例如qmake,rcc,uic)与二进制文件分开。如果提供这些工具,它们将安装在指定目录而不是extprefix

Qt配置选项

configure是一个命令行工具,它确定如何为特定平台构建Qt。配置可以排除Qt中的功能,也可以确定Qt如何在主机平台上构建和部署应用程序。该页面讨论了一些配置选项,但是要获得选项的完整列表,请输入命令configure -h。配置应从Qt主目录运行。

除非另有说明,否则此页面中的命令适用于Linux平台。在macOS和Windows上,PATH和目录结构不同,因此命令将有所不同。同样,在Windows系统上,配置脚本称为configure.bat

运行configure后,使用make属于所选工具链的工具构建源。

源目录,构建目录和安装目录

所述目录包含从源包或git仓库中获得的源代码。所述构建目录是构建相关的文件,例如生成文件,对象文件和其他中间文件的存储。该安装目录是二进制文件和库安装,使用或者由系统或应用程序。

建议通过阴影构建和使用该-prefix选项将这些目录分开。这使您可以保持Qt 源代码树中的构建工件和二进制文件干净,这些工件和二进制文件存储在单独的目录中。如果要从同一源代码树进行多个构建,但要针对不同的配置,则此方法非常方便。要进行影子构建,请在configure单独的目录中运行:

<pre class="cpp plain" style="margin: 0.75em 0px 25px; padding: 25px; border: 0px; font-size: 0.8em; vertical-align: baseline; background-color: rgb(58, 64, 85); color: rgb(255, 255, 255); display: block; font-family: "Droid Sans Mono"; line-height: 1.5; overflow-x: auto;">mkdir〜/ qt-build cd〜/ qt-build 〜/ qt-source / configure -prefix /opt/Qt5.9 qmake</pre>

使用该-prefix选项进行配置意味着将Qt二进制文件和库安装到另一个目录中,/opt/Qt5.9在这种情况下就是这样。运行会qmake〜/ qt-build目录而不是目录中生成Makefile 。在生成文件之后,运行以下命令来构建Qt二进制文件和库并安装它们:

<pre class="cpp plain" style="margin: 0.75em 0px 25px; padding: 25px; border: 0px; font-size: 0.8em; vertical-align: baseline; background-color: rgb(58, 64, 85); color: rgb(255, 255, 255); display: block; font-family: "Droid Sans Mono"; line-height: 1.5; overflow-x: auto;">使 进行安装</pre>

模块和功能

Qt由不同的模块组成,这些模块的源可以在顶级源目录的不同目录中找到。用户可以明确排除特定的顶级目录以限制构建时间。此外,每个Qt模块可能都具有可以显式启用或禁用的功能。

不包括Qt模块

配置-skip选项允许将顶级源目录从Qt构建中排除。请注意,许多目录包含多个Qt模块。例如,要从Qt构建中排除Qt NFC和Qt蓝牙,请提供-skip qtconnectivity配置参数。

<pre class="cpp prettyprint prettyprinted" style="margin: 0.75em 0px 25px; padding: 25px; border: 0px; font-size: 0.8em; vertical-align: baseline; background-color: rgb(58, 64, 85); color: rgb(255, 255, 255); display: block; font-family: "Droid Sans Mono"; line-height: 1.5; overflow-x: auto;">。/配置-跳过qtconnectivity</pre>

包含或排除功能

所述-feature-<特征>-no-feature-<特征>选项包括和排除分别具体特征,。

例如,要禁用Accessibility,请提供-no-feature-accessibility作为参数:

<pre class="cpp prettyprint prettyprinted" style="margin: 0.75em 0px 25px; padding: 25px; border: 0px; font-size: 0.8em; vertical-align: baseline; background-color: rgb(58, 64, 85); color: rgb(255, 255, 255); display: block; font-family: "Droid Sans Mono"; line-height: 1.5; overflow-x: auto;">。/配置-否-功能-可访问性</pre>

用于configure -list-features在命令行上显示所有可用功能的列表。请注意,功能可能取决于其他功能,因此禁用功能可能会对其他功能产生副作用。

作为用于设备创建Qt的一部分的Qt配置工具允许通过方便的用户界面来调整功能和依赖项。

第三方图书馆

Qt源码包包括第三方库。要设置Qt是使用库的系统版本还是使用捆绑的版本,请在库名称之前-system-qt之前传递以进行配置。

下表总结了第三方选项:

图书馆名称 捆绑在Qt 安装在系统中
zlib -qt-zlib -system-zlib
libjpeg -qt-libjpeg -system-libjpeg
libpng -qt-libpng -system-libpng
xcb -qt-xcb -system-xcb
自由型 -qt-freetype -system-freetype
聚四氟乙烯 -qt-pcre -system-pcre
HarfBuzz -NG -qt-harfbuzz -system-harfbuzz

也可以使用-no代替来禁用对这些库的支持-qt。例如,要使用系统的xcb库并禁用zlib支持,请输入以下内容:

<pre class="cpp prettyprint prettyprinted" style="margin: 0.75em 0px 25px; padding: 25px; border: 0px; font-size: 0.8em; vertical-align: baseline; background-color: rgb(58, 64, 85); color: rgb(255, 255, 255); display: block; font-family: "Droid Sans Mono"; line-height: 1.5; overflow-x: auto;">。/配置-无- zlib的- QT -的libjpeg - QT -的libpng -系统- XCB</pre>

有关选项的完整列表,请参考中的帮助configure -help

编译器选项

-platform选项设置用于构建Qt源的主机平台和编译器。在“ 受支持的平台”页面中找到受支持的平台和编译器的列表,而完整列表位于qtbase / mkspecs目录中。

例如,在Ubuntu Linux系统上,Qt可以通过clang或g ++等几种编译器进行编译:

<pre class="cpp prettyprint prettyprinted" style="margin: 0.75em 0px 25px; padding: 25px; border: 0px; font-size: 0.8em; vertical-align: baseline; background-color: rgb(58, 64, 85); color: rgb(255, 255, 255); display: block; font-family: "Droid Sans Mono"; line-height: 1.5; overflow-x: auto;">。/ configure - platform linux - clang 。/配置-平台的Linux -摹+ + 。/配置-平台的linux -克+ + - 32</pre>

对于Windows计算机,可以使用MinGW或Visual Studio工具链来编译Qt。

<pre class="cpp prettyprint prettyprinted" style="margin: 0.75em 0px 25px; padding: 25px; border: 0px; font-size: 0.8em; vertical-align: baseline; background-color: rgb(58, 64, 85); color: rgb(255, 255, 255); display: block; font-family: "Droid Sans Mono"; line-height: 1.5; overflow-x: auto;">配置。蝙蝠-平台win32的-摹+ + 配置。蝙蝠-平台的win32 - MSVC</pre>

之后,生成的Makefile将使用适当的编译器命令。

交叉编译选项

为了配置Qt进行跨平台开发和部署,需要设置目标平台的开发工具链。此设置在受支持的平台之间有所不同。

常见选项有:

  • -xplatform-目标平台。有效的xplatform选项与qtbase / mkspecs中-platform选项相同。
  • -device-特定的设备或芯片组。可在qtbase / mkspecs / devices中找到与之兼容的配置设备列表。有关更多信息,请访问Devices Wiki页面。
  • -device-option-设置其他qmake变量。例如,-device-option CROSS_COMPILE=<path-to-toolchain>提供CROSS_COMPILE某些设备所需的环境变量。

注意:非桌面目标的工具链通常带有所谓的sysroot,需要针对Qt对其进行配置。

平台的特定选项

以下页面提供有关如何为特定平台开发配置Qt的准则:

Windows的OpenGL选项

在Windows上,可以使用系统OpenGL或ANGLE配置Qt 。默认情况下,Qt配置为使用动态OpenGL。这意味着它会尝试使用系统OpenGL,然后退回到ANGLE,如果本机OpenGL无法正常工作,则该角度将与Qt捆绑在一起并取决于DirectX SDK。ANGLE允许运行依赖OpenGL的Qt应用程序,而无需安装最新的OpenGL驱动程序。如果ANGLE也失败,则Qt将退回到软件渲染,这是最慢但最安全的渲染方法。

-opengl选项可用于将Qt配置为在目标系统中使用OpenGL,不同版本的OpenGL ES(带有或不带有ANGLE),或在可用的OpenGL实现之间动态切换。

<pre class="cpp" style="margin: 0.75em 0px 25px; padding: 25px; border: 0px; font-size: 0.8em; vertical-align: baseline; background-color: rgb(58, 64, 85); color: rgb(255, 255, 255); display: block; font-family: "Droid Sans Mono"; line-height: 1.5; overflow-x: auto;">配置。蝙蝠- OpenGL的动态</pre>

使用该dynamic选项,Qt将首先尝试使用本机OpenGL。如果失败,它将退回到ANGLE,最后也退回到ANGLE失败的情况下进行软件渲染。

<pre class="cpp" style="margin: 0.75em 0px 25px; padding: 25px; border: 0px; font-size: 0.8em; vertical-align: baseline; background-color: rgb(58, 64, 85); color: rgb(255, 255, 255); display: block; font-family: "Droid Sans Mono"; line-height: 1.5; overflow-x: auto;">配置。蝙蝠- OpenGL的桌面</pre>

使用该desktop选项,Qt使用Windows上安装的OpenGL,要求目标Windows计算机中的OpenGL与该应用程序兼容。该-opengl选项接受es2OpenGL ES 2.0或es1OpenGL ES Common Profile的两个版本的OpenGL ES 。

<pre class="cpp" style="margin: 0.75em 0px 25px; padding: 25px; border: 0px; font-size: 0.8em; vertical-align: baseline; background-color: rgb(58, 64, 85); color: rgb(255, 255, 255); display: block; font-family: "Droid Sans Mono"; line-height: 1.5; overflow-x: auto;">配置。蝙蝠-的OpenGL ES2</pre>

您还可以使用-opengl dynamic,使应用程序可以在运行时在可用选项之间动态切换。有关使用动态GL切换的好处的更多详细信息,请参见图形驱动程序

开发人员构建

-developer-build选件并不适用于运输应用,但可用于开发Qt。这样的构建包含比标准构建更多的导出符号,并以更高的警告级别进行编译。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,137评论 6 511
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,824评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,465评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,131评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,140评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,895评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,535评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,435评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,952评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,081评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,210评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,896评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,552评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,089评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,198评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,531评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,209评论 2 357

推荐阅读更多精彩内容