美文网首页
QT - 配置嵌入式Linux设备

QT - 配置嵌入式Linux设备

作者: YottaYuan | 来源:发表于2020-04-07 21:14 被阅读0次

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。这样的构建包含比标准构建更多的导出符号,并以更高的警告级别进行编译。

相关文章

网友评论

      本文标题:QT - 配置嵌入式Linux设备

      本文链接:https://www.haomeiwen.com/subject/efdnphtx.html