事实上一般来说,vscode的插件可以满足半分制九十以上的情况,但是当你面对一个比较大的项目时,自带的插件并不是很好。就LSP来说,自带的插件依赖是较弱的,所以当你在一个比较大的SDK下开发时,代码跳转等等相关功能都会失常。
使用bear工具
好消息是,我查阅了相关资料后发现,vscode里的原生插件虽然依赖比较弱,++但是它可以采纳bear生成的 compile_commands.json 文件(需要配置)++。
compile_commands.json :
该文件会记录编译的各种信息,包括编译的各种依赖库,内部函数以及各种外部引用变量信息,头文件的路径位置等等信息。该文件由bear生成。
bash
sudo apt install bear
bear -- make compile #(选择你的make指令)
然后在VSCode中配置,首先切换到根目录的,打开隐藏的.vscode/c_cpp_properties文件(懒得写)当然你也SCode,这是工作目录对应的配置文件。
添加"compileCommands",以及对应的路径:

完成之后,crtl+s保存一下,然后去你的主要代码看你的函数会不会子自动加载声明体,头文件能不能跳转。
进阶使用
刚刚讲述的情况足够你在单一app或者demo下使用,但是当前你切换到其他的demo时,这个东西就不起作用了,而且你还没有办法配置vscode的配置文件同时指派两个编译文件。
新的方法是使用jc将所有的json文件聚合,并且配置为每次打开工作区目录都自动聚合。
首先下载 jq:
bash
sudp apt install jq
pip3 install comdp
comdp也是一个聚合工具,但是我没有实践成功。
然后执行:
bash
find . -name compile_commands.json
shopt globstar #打开递归查找选项
touch aggregate-compile-commands.sh
然后在脚本中写入:
bash
#!/bin/bash
ls ./example/**/compile_commands.json
find . -name 'compile_commands.json' ! -path './compile_commands.json' -exec cat {} + | jq -s 'add'
echo "generate complete"
最后在.vscode下的task.json里配置:

源码:
bash
{
"version": "2.0.0",
"tasks": [
{
"label": "Aggregate Compile Commands",
"type": "shell",
"command": "${workspaceFolder}/scripts/aggregate-compile-commands.sh",
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": [],
"presentation": {
"reveal": "always",
"panel": "dedicated",
"clear": true
}
}
]
}
至此,在example下的任意执行 code demo ,执行有对应生成的json文件,按下crtl shift P 执行对应的指令,就可以一键更新LSP通信文件了。