Qt交叉编译.md 8.4 KB

qt build

qmake.conf

export PATH=/opt/arm-gnu-toolchain-11.3.rel1-x86_64-aarch64-none-linux-gnu/bin:$PATH
  • qtbase/mkspecs/linux-aarch64-gnu-g++/qmake.conf

    #
    # 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-none-linux-gnu-gcc
    QMAKE_CXX               = aarch64-none-linux-gnu-g++
    QMAKE_LINK              = aarch64-none-linux-gnu-g++
    QMAKE_LINK_SHLIB        = aarch64-none-linux-gnu-g++
    
    # modifications to linux.conf
    QMAKE_AR                = aarch64-none-linux-gnu-ar cqs
    QMAKE_OBJCOPY           = aarch64-none-linux-gnu-objcopy
    QMAKE_NM                = aarch64-none-linux-gnu-nm -P
    QMAKE_STRIP             = aarch64-none-linux-gnu-strip
    load(qt_config)
    

configure options

  • -xplatform
    使用自定义的mkspec (qtbase/mkspecs/)
  • -skip <repo>
    -skip <repo><repo 名字指的是 Qt 的子仓库(repository)名称,也就是 Qt 各个模块在源码树中的顶层目录名称。
    Qt 源码根目录下执行:

    ls -d qt*/
    

    示例输出

    qt3d/             qtcanvas3d/      qtdeclarative/       qtimageformats/  qtnetworkauth/     qtremoteobjects/  qtserialbus/   qttools/            qtwebchannel/   qtwebview/
    qtactiveqt/       qtcharts/        qtdoc/               qtlocation/      qtpurchasing/      qtscript/         qtserialport/  qttranslations/     qtwebengine/    qtwinextras/
    qtandroidextras/  qtconnectivity/  qtgamepad/           qtmacextras/     qtquickcontrols/   qtscxml/          qtspeech/      qtvirtualkeyboard/  qtwebglplugin/  qtx11extras/
    qtbase/           qtdatavis3d/     qtgraphicaleffects/  qtmultimedia/    qtquickcontrols2/  qtsensors/        qtsvg/         qtwayland/          qtwebsockets/   qtxmlpatterns/
    
    仓库名 功能说明 嵌入式建议
    qtbase/ Qt 核心库,包括 GUI、核心类、事件循环、网络、线程、QtCore、QtGui、QtWidgets ✅ 必须
    qtdeclarative/ QML / Qt Quick 引擎 ✅ 必须(界面开发)
    qtquickcontrols/ Qt Quick Controls 1(老版控件库) ⚙️ 可选,一般用 qtquickcontrols2
    qtquickcontrols2/ Qt Quick Controls 2(现代 QML 控件库) ✅ 推荐
    qtsvg/ SVG 渲染支持 ⚙️ 推荐,如果界面需要 SVG 图标
    qttools/ Qt 工具,如 lrelease, moc, rcc ✅ 需要工具编译
    qtmultimedia/ 音视频、摄像头、音频播放接口 ⚙️ 按需启用
    qtserialport/ 串口支持 ✅ 嵌入式常用
    qtserialbus/ 串口总线(CAN/Modbus 等) ⚙️ 可选
    qtsensors/ 传感器接口(加速度计、陀螺仪等) ⚙️ 按需启用
    qtconnectivity/ 蓝牙、NFC、网络连接管理 ⚙️ 可选
    qtgamepad/ 游戏手柄接口 ❌ 嵌入式一般不启用
    qt3d/ 3D 图形和场景管理 ❌ 一般不启用
    qtdatavis3d/ 3D 数据可视化 ❌ 一般不启用
    qtcharts/ 2D 图表控件 ⚙️ 按需启用
    qtpositioning/ (在 5.12.12 有时叫 gypsy) 地理定位 ⚙️ 按需启用
    qtlocation/ 地图和位置服务 ❌ 嵌入式一般不启用
    qtwebengine/ Chromium 内核,浏览器组件 ❌ 太大,不推荐嵌入式使用
    qtwebview/ 简单 WebView 组件 ❌ 嵌入式一般不启用
    qtwebchannel/ QML/JS 与 C++ 通信 ⚙️ 按需启用
    qtwebsockets/ WebSocket 支持 ⚙️ 按需启用
    qtwebglplugin/ QtQuick → WebGL 导出插件 ❌ 嵌入式一般不启用
    qtwinextras/ Windows 特定接口 ❌ 跳过
    qtmacextras/ macOS 特定接口 ❌ 跳过
    qtandroidextras/ Android 特定接口 ❌ 跳过(RK3588 Linux 不用)
    qtscxml/ SCXML 状态机支持 ⚙️ 可选
    qtscript/ QtScript 脚本支持 ⚙️ 可选,Qt5 已被废弃
    qtpurchasing/ 商店购买 API ❌ 跳过
    qtdoc/ 官方文档 ❌ 跳过
    qttranslations/ 国际化文件 ⚙️ 可选
    qtgraphicaleffects/ QML 图形效果(阴影、模糊等) ⚙️ 推荐
    qtimageformats/ PNG/JPG/TIFF/WebP 等图片格式插件 ✅ 必须
    qtvirtualkeyboard/ 虚拟键盘 ⚙️ 如果嵌入式需要屏幕键盘启用
    qtxmlpatterns/ XPath/XQuery/Xml schema 支持 ⚙️ 按需启用
    qtcanvas3d/ WebGL 风格 3D Canvas(QtQuick3D 的前身) ❌ 一般不启用
    qtactiveqt/ COM / ActiveX 接口(Windows) ❌ 跳过
    qtnetworkauth/ OAuth 网络认证 ⚙️ 按需启用
    qtremoteobjects/ 分布式对象同步(网络共享对象) ⚙️ 可选
    qtspeech/ TTS / 语音 ⚙️ 按需启用
    qtx11extras/ X11 平台扩展 ⚙️ 仅 X11 平台用
    qtwayland/ Wayland 平台支持 ⚙️ 嵌入式可启用(Wayland 后端)