前言
在使用微软的C/C++插件时,遇到较大项目时,代码提示速度非常的慢,这时可以使用clangd
1、系统安装clangd
版本选择:Linux
github仓库: https://github.com/clangd/clangd/releases
解压下载好的安装包:
unzip clangd-linux-15.0.6.zip
然后进入该文件夹:
cd clangd_15.0.6/
将bin文件夹下的clangd移动到 /usr/bin 目录下:
cd bin/
sudo mv clangd /usr/bin/
将 lib 目录下,拷贝至 /usr/local/lib 目录下:
cd …/lib/
sudo mv clang /usr/local/lib
2、VSCode 安装 Clangd
安装插件:
clangd扩展设置clangd路径:文件 -> 首选项 -> 设置
在搜索框中输入:@ext:llvm-vs-code-extensions.vscode-clangd Path
此时已经设置完成,重启一下VSCode
3、解决 clangd bug
创建一个 main.c 文件,内容为:
#include <stdio.h>
int main()
{
printf("Hello World !\n");
return 0;
}
此时会报一个错误
In included file: ‘stddef.h’ file not foundclang(pp_file_not_found)
解决办法如下:
在clangd扩展设置界面找到 Clangd: Fallback Flags
添加一下内容
-xc //clangd默认检测的源文件为c++,手动设置为检测c
-std=c11 //c语言标准
-I/usr/lib/gcc/x86_64-linux-gnu/11/include //clangd有些库指向有问题,手动添加一下文件路径
此时在重启一下VSCode,再次打开 main.c 会发现错误消失了
4、打开工程文件
目前正在学习IMX6ULL开发,就以IMX6ULL裸机例程——irq中断处理为例
文件目录如下:
.
├── bsp
│ ├── beep
│ │ ├── bsp_beep.c
│ │ └── bsp_beep.h
│ ├── clk
│ │ ├── bsp_clk.c
│ │ └── bsp_clk.h
│ ├── delay
│ │ ├── bsp_delay.c
│ │ └── bsp_delay.h
│ ├── exti
│ │ ├── bsp_exti.c
│ │ └── bsp_exti.h
│ ├── gpio
│ │ ├── bsp_gpio.c
│ │ └── bsp_gpio.h
│ ├── int
│ │ ├── bsp_int.c
│ │ └── bsp_int.h
│ ├── key
│ │ ├── bsp_key.c
│ │ └── bsp_key.h
│ └── led
│ ├── bsp_led.c
│ └── bsp_led.h
├── build
│ ├── bsp_beep.o
│ ├── bsp_clk.o
│ ├── bsp_delay.o
│ ├── bsp_exti.o
│ ├── bsp_gpio.o
│ ├── bsp_int.o
│ ├── bsp_key.o
│ ├── bsp_led.o
│ ├── __int.bin
│ ├── __int.dis
│ ├── __int.elf
│ ├── __int.map
│ ├── main.o
│ └── start.o
├── imx6u.lds
├── imx6ull
│ ├── cc.h
│ ├── core_ca7.h
│ ├── fsl_common.h
│ ├── fsl_iomuxc.h
│ ├── imx6ull.h
│ └── MCIMX6Y2.h
├── imxdownload
├── load.imx
├── Makefile
└── project
├── main.c
└── start.S
打开之后头文件会显示没有该文件,此时我们设置一下该项目的头文件路径
首先在项目的根目录下创建一个 .vscode 文件夹,并在该文件夹下创建一个 settings.json 文件
在 settings.json 中写入以下内容
{
"clangd.fallbackFlags": [
"-xc",
"-std=c11", //C语言标准
// 第三方依赖的头文件目录
"-I/usr/lib/gcc/x86_64-linux-gnu/11/include",
"-I${workspaceFolder}/project",
"-I${workspaceFolder}/imx6ull",
"-I${workspaceFolder}/bsp/led",
"-I${workspaceFolder}/bsp/delay",
"-I${workspaceFolder}/bsp/clk",
"-I${workspaceFolder}/bsp/beep",
"-I${workspaceFolder}/bsp/gpio",
"-I${workspaceFolder}/bsp/key",
"-I${workspaceFolder}/bsp/int",
"-I${workspaceFolder}/bsp/exti",
],
}
此时重新打开该项目,头文件就不会再报错了,也支持函数跳转了