Vscode + Clangd 配置嵌入式 Linux 开发环境

之前我一直使用
VSCode + C/C++ + Remote - SSH
进行嵌入式 Linux 驱动开发学习

但经常找不到头文件,自动补全也几乎不可用
在这里插入图片描述

在网上查找很多帖子后,学习使用了
VSCode + C/C++ + clangd + Remote - SSH
进行开发

Bear

clangd 需要一个 compile_commands.json 文件才能正确解析项目的编译选项和文件依赖
可以使用 Cmake 或 Bear 生成 compile_commands.json 文件

由于之前没有使用过 CMake,再加上学习 CMake 有一定的成本,所以我选择使用 Bear 工具来生成 compile_commands.json 文件

安装 Bear

sudo apt-get install bear
查看 Bear 是否安装成功
在这里插入图片描述

Bear 的使用

在这里插入图片描述
2.4.x 版本之前是在 build 命令前加上 bear 命令
bear <your-build-command>
2.4.x 版本之后是
bear -- <your-build-command>

使用 Bear 生成compile_commands.json

在 Linux 源码文件中使用 bear 命令生成compile_commands.json

ERROR: ld.so: object ‘/usr/${LIB}/bear/libear.so‘ from LD_PRELOAD

我的 Bear 版本是 2.3.11,没有自动设置 LD_PRELOAD 环境变量
编译时会产生 ld.so: object ‘/usr/${LIB}/bear/libear.so‘ from LD_PRELOAD 错误
在这里插入图片描述

解决方案

检查 libear.so 路径:
使用以下命令检查 libear.so 的实际路径
find /usr -name libear.so

然后使用 bear -l 指定路径
bear -l /实际路径/libear.so make

或者手动设置 LD_PRELOAD 再使用 bear 命令
export LD_PRELOAD=/实际路径/libear.so


执行命令 bear -l /usr/lib/x86_64-linux-gnu/bear/libear.so make -j4

命令执行结束后会在项目文件夹下生成 compile_commands.json 文件
在这里插入图片描述
需要将 “cc” 全局替换为 “arm-buildroot-linux-gnueabihf-gcc”
在 vim 中输入如下命令
:%s/"cc"/"arm-buildroot-linux-gnueabihf-gcc"/g
在这里插入图片描述

不替换的话会报这个错
在这里插入图片描述
Unsupported option ‘-mabi=’ for target ‘x86_64-unknown-linux-gnu’

clangd

在 Linux 上安装 clangd

执行命令 sudo apt-get install clangd 后显示无法定位软件包
在这里插入图片描述
查看资料发现
我的 Ubuntu 版本是 18.04.6
默认的 clangd 版本非常老 (安装命令都不一样)
在这里插入图片描述
在这里插入图片描述

手工安装 clangd

从官网 https://github.com/clangd/clangd/releases 下载安装包
在这里插入图片描述

安装后查看 clangd 版本
在这里插入图片描述

在 VSCode 上配置 clangd

settings.json

在 VSCode 的配置文件中增加如下配置

    "clangd.arguments": [
        "--background-index",                   // 在后台自动分析文件(基于complie_commands)
        "--compile-commands-dir=/home/yz/workspace/kernel-driver/linux-xlnx-xlnx_rebase_v5.4_2020.2",   
                                                // compelie_commands.json文件的目录位置  
        "-j=4",                                 // 同时开启的任务数量
        "--query-driver=/usr/bin/gcc",          // 编译器的路径
        "--clang-tidy",                         // clang-tidy 功能
        "--clang-tidy-checks=performance-*,bugprone-*",
        "--all-scopes-completion",              // 全局补全(会自动补充头文件)
        "--completion-style=detailed",          // 更详细的补全内容
        "--header-insertion=iwyu",              // 补充头文件的形式
        "--pch-storage=disk",                   // pch 优化的位置
    ],
    "clangd.path": "/usr/bin/clangd", 
    "clangd.fallbackFlags": [
        "-I/home/yz/workspace/kernel-driver/linux-xlnx-xlnx_rebase_v5.4_2020.2/include",
        "-I/home/yz/workspace/kernel-driver/linux-xlnx-xlnx_rebase_v5.4_2020.2/arch/arm/include",
        "-I/home/yz/workspace/kernel-driver/linux-xlnx-xlnx_rebase_v5.4_2020.2/arch/arm/include/generated/"
    ]

clangd.fallbackFlags 是 clangd 的配置选项之一,用于指定当无法从 compile_commands.json 文件中获取编译选项时要使用的备用编译选项

这里我配置的是 Linux 源码的函数头文件路径

.clangd

创建 .clangd 文件,把它放在工程目录下

我的 .clangd 文件内容如下

CompileFlags:
    Add:
        [-I, "/usr/include"]
    Remove: 
        [
            -fconserve-stack, 
            -fno-ipa-sra,
            -fno-var-tracking-assignments
        ]

关于 CompileFlags,官方资料如下
在这里插入图片描述

Add: [-I, "/usr/include"]
是为了解决找不到标准库头文件的问题

Remove 是为了解决如下错误
在这里插入图片描述


至此,使用 clangd 的嵌入式 Linux 开发环境配置完成

参考

C++开发环境最佳实践

bear工具使用:ERROR: ld.so: object ‘/usr/${LIB}/bear/libear.so‘ from LD_PRELOAD

在Ubuntu中搭建嵌入式Linux开发环境

最终,我看向了clangd

  • 20
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
VSCode是一款轻量级的代码编辑器,而clangd是Clang提供的一个语言服务器,用于提供C/C++代码的智能补全、代码导航、重构等功能。通过在VSCode配置clangd,可以使得在C/C++开发中拥有更好的开发体验。 以下是配置VSCodeclangd的步骤: 1. 安装VSCode:前往VSCode官网下载并安装最新版本的VSCode。 2. 安装C/C++扩展:在VSCode中搜索并安装C/C++扩展,该扩展提供了对C/C++语言的支持。 3. 安装clangd:根据操作系统选择合适的方式安装clangd。在Windows上,可以通过MSYS2或者Scoop来安装clangd。在MacOS上,可以通过Homebrew来安装clangd。 4. 配置clangd路径:在VSCode中打开设置(快捷键Ctrl + ,),搜索"C_Cpp: Clangd Path",将clangd的路径配置到该设置项中。 5. 配置编译器路径(可选):如果你的项目需要使用特定的编译器,可以在VSCode中打开设置,搜索"C_Cpp: Default Compiler Path",将编译器的路径配置到该设置项中。 6. 打开C/C++项目:在VSCode中打开你的C/C++项目文件夹。 7. 配置编译选项(可选):如果你的项目需要特定的编译选项,可以在项目文件夹中创建一个名为".vscode"的文件夹,并在该文件夹中创建一个名为"c_cpp_properties.json"的文件。在该文件中配置你的编译选项。 8. 开始使用clangd:现在,你可以在VSCode中开始使用clangd提供的功能了。例如,当你输入代码时,clangd会自动提供代码补全建议;当你点击函数或变量时,clangd会提供相关的定义和引用;当你重构代码时,clangd会提供重构建议等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值