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 编译"
        }
    ]
}
相关推荐
GanGanGanGan_6 小时前
RustDesk 安装指南 — Rocky Linux 9 + XFCE X11
linux·运维·centos
南境十里·墨染春水10 小时前
linux学习笔记 网络编程——Socket入门与TCP客户端/服务器实现
linux·服务器·网络
Yupureki11 小时前
《Linux网络编程》6.UDP原理
linux·运维·服务器·网络·udp
楼田莉子12 小时前
Linux网络:NAT_代理
linux·运维·服务器·开发语言·c++·后端
烛衔溟12 小时前
TypeScript 索引签名、只读数组与 keyof / typeof 入门
linux·ubuntu·typescript
笨笨饿13 小时前
#79_NOP()嵌入式C语言中内联汇编宏的抽象封装模式研究
linux·c语言·网络·驱动开发·算法·硬件工程·个人开发
fish_xk13 小时前
Linux的权限
linux·运维·服务器
嵌入式×边缘AI:打怪升级日志15 小时前
Linux 驱动与应用开发核心自测题库(面试官问答完整版)
linux·运维·php
薛定谔的悦16 小时前
储能充放电状态机执行逻辑详解
linux·数据库·能源·储能·bms
嵌入式×边缘AI:打怪升级日志17 小时前
Tina SDK Linux Kernel 基本使用(实战篇:为7寸RGB LCD触摸屏添加驱动支持).md
linux·运维·服务器