Ubuntu + VSCODE +aarch64 +qt +qmake +clangd

MX6 工具链 arm-linux-generic-elf-32bit

名称:imx6-5.12.10

sysroot:/opt/fsl-imx-fb/qt5/sysroots/cortexa9hf-neon-poky-linux-gnueabi

编译器:

GCC-imx6: /opt/fsl-imx-fb/qt5/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-gcc

G++-imx6: /opt/fsl-imx-fb/qt5/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-g++

调试器:

QT

Qt %{Qt:Version} (qt5.12.10) /opt/fsl-imx-fb/qt5.12.10/bin/qmake

Qt %{Qt:Version} for Android armv7 opt/fsl-imx-fb/Qt5.9.5/5.9.5/android_armv7/bin/qmake

Qt %{Qt:Version} GCC 64bit /opt/fsl-imx-fb/Qt5.9.5/5.9.5/gcc_64/bin/qmake

## Ubuntu 20.04

  1. SDK 工具链的安装位置 tar -zxf t527-sdk.tar.gz -C /opt

    ls /opt/t527-sdk/
    aarch64-buildroot-linux-gnu doc include lib64 man opt sbin usr
    bin etc lib libexec mkspecs relocate-sdk.sh share

qmake 的安装位置**/opt/t527-sdk/bin/qmake**

sysroot : --sysroot=/opt/t527-sdk/aarch64-buildroot-linux-gnu/sysroot

  1. 配置 qmake 编译环境

apt install bear : 用于生成 clangd 使用的 compile_commands.json

复制代码
#!/bin/bash
# Compile
mkdir build && cd build
/opt/t527-sdk/bin/qmake ../L9128H_3067.pro

bear make -j $(nproc) # generates compile_commands.json
  1. vscode 安装clangd , 并在工程目录下设置 .clangd

    CompileFlags:
    Add:
    # 交叉编译器系统目录
    - --sysroot=/opt/t527-sdk/aarch64-buildroot-linux-gnu/sysroot

    复制代码
     # Qt 头文件路径
     - -I/opt/t527-sdk/aarch64-buildroot-linux-gnu/sysroot/usr/include/qt5
     - -I/opt/t527-sdk/aarch64-buildroot-linux-gnu/sysroot/usr/include/qt5/QtCore
     - -I/opt/t527-sdk/aarch64-buildroot-linux-gnu/sysroot/usr/include/qt5/QtGui
     - -I/opt/t527-sdk/aarch64-buildroot-linux-gnu/sysroot/usr/include/qt5/QtWidgets
     - -I/opt/t527-sdk/aarch64-buildroot-linux-gnu/sysroot/usr/include/qt5/QtNetwork
     - -I/opt/t527-sdk/aarch64-buildroot-linux-gnu/sysroot/usr/include/qt5/QtQml
     - -I/opt/t527-sdk/aarch64-buildroot-linux-gnu/sysroot/usr/include/qt5/QtQuick
    
     # Qt 宏定义
     - -DQT_CORE_LIB
     - -DQT_GUI_LIB
     - -DQT_WIDGETS_LIB
     - -DQT_NETWORK_LIB
     - -DQT_QML_LIB
     - -DQT_QUICK_LIB

    移除主机系统的 Qt 路径,避免冲突

    Remove:
    - -I/usr/include/x86_64-linux-gnu/qt5
    - -I/usr/include/qt5

在 .vscode/settings 增加 clangd 参数

复制代码
{
    "clangd.arguments": [
        
    // 在后台自动分析文件(基于complie_commands)
    "--background-index",
    // 标记compelie_commands.json文件的目录位置
    "--compile-commands-dir=build",
    // 同时开启的任务数量
    "-j=12",
    // clang-tidy功能
    "--clang-tidy",
    // 全局补全(会自动补充头文件)
    "--all-scopes-completion",
    // 详细补全
    "--completion-style=detailed",
    // 补充头文件
    "--header-insertion=iwyu",
    // pch优化的位置
    "--pch-storage=disk",
    ]
}

.vscode/c_cpp_properties.json

复制代码
{
    "configurations": [
        {
            "name": "T527-ARM64",
            "includePath": [
                "${workspaceFolder}/**",
                "/opt/t527-sdk/aarch64-buildroot-linux-gnu/sysroot/usr/include",
                "/opt/t527-sdk/aarch64-buildroot-linux-gnu/sysroot/usr/include/qt5",
                "/opt/t527-sdk/aarch64-buildroot-linux-gnu/sysroot/usr/include/qt5/QtCore",
                "/opt/t527-sdk/aarch64-buildroot-linux-gnu/sysroot/usr/include/qt5/QtGui",
                "/opt/t527-sdk/aarch64-buildroot-linux-gnu/sysroot/usr/include/qt5/QtWidgets"
            ],
            "defines": [
                "QT_CORE_LIB",
                "QT_GUI_LIB",
                "QT_WIDGETS_LIB"
            ],
            "compilerPath": "/opt/t527-sdk/bin/aarch64-none-linux-gnu-g++",
            "cStandard": "c11",
            "cppStandard": "c++17",
            "intelliSenseMode": "gcc-x64"
        }
    ],
    "version": 4
}

.vscode/launch.json

复制代码
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "ARM64 Debug (T527)",
            "type": "cppvsdbg",
            "request": "launch",
            "program": "${workspaceFolder}/app_t527",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "/usr/bin/gdb-multiarch",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}

.vscode/task.json

复制代码
{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "ARM64 Build (T527-SDK)",
            "type": "shell",
            "command": "/opt/t527-sdk/bin/aarch64-none-linux-gnu-g++",
            "args": [
                "-g",
                "-std=c++17",
                "--sysroot=/opt/t527-sdk/aarch64-buildroot-linux-gnu/sysroot",
                "-I/opt/t527-sdk/aarch64-buildroot-linux-gnu/sysroot/usr/include/qt5",
                "-I/opt/t527-sdk/aarch64-buildroot-linux-gnu/sysroot/usr/include/qt5/QtCore",
                "-I/opt/t527-sdk/aarch64-buildroot-linux-gnu/sysroot/usr/include/qt5/QtGui",
                "-I/opt/t527-sdk/aarch64-buildroot-linux-gnu/sysroot/usr/include/qt5/QtWidgets",
                "-DQT_CORE_LIB",
                "-DQT_GUI_LIB",
                "-DQT_WIDGETS_LIB",
                "${workspaceFolder}/main.cpp",
                "-o",
                "${workspaceFolder}/app_t527",
                "-L/opt/t527-sdk/aarch64-buildroot-linux-gnu/sysroot/usr/lib",
                "-lQt5Core",
                "-lQt5Gui",
                "-lQt5Widgets"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "problemMatcher": ["$gcc"],
            "detail": "T527 ARM64 Qt 编译"
        }
    ]
}
相关推荐
JJJennie7771 小时前
MAI Gateway技术揭秘:大模型网关能做什么?从原理到落地
linux·服务器·网络·ai网关
风哥2号3 小时前
数据库教程FGMT02‑生产环境Linux+Oracle19c安装配置与项目实战
linux·数据库·ffmpeg
wuminyu6 小时前
Kafka中sendfile与mmap实现机制解析
java·linux·c语言·jvm·c++
新时代牛马7 小时前
嵌入式网络完整篇:从LwIP/以太网驱动到 Linux netdev 与排障
linux·网络·php
lqj_本人7 小时前
WinPcap 鸿蒙 PC 适配全记录:从 NPF 原始抓包到 VPN_TUN 与 libpcap 双通路
qt·华为·harmonyos
猿与禅7 小时前
Linux(Ubuntu)入门到实战:系统管理、常用命令与权限体系完整指南
linux·ubuntu·apt·进程管理·系统运维·用户权限·vi/vim
前端世界7 小时前
Linux服务器实战:NTP时间同步、SELinux权限与rsyslog日志管理,一次搞懂三大运维问题
linux·运维·服务器
Android系统攻城狮7 小时前
Linux Gstreamer深度解析之gst_audio_converter_new调用流程与实战(二十)
linux·运维·服务器·gstreamer音视频·音视频进阶
Quz10 小时前
QML StackView:三种入栈方式(Item、Component 与 URL)
qt
Quz10 小时前
QML StackView:入栈、出栈、替换与批量操作
qt