Linux下VSCode开发环境配置(LSP)

事实上一般来说,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通信文件了。

相关推荐
七歌杜金房4 小时前
我终于又有了自己的 Linux 电脑
linux·debian·mac
tntxia1 天前
linux curl命令详解_curl详解
linux
扛枪的书生1 天前
Linux 网络管理器用法速查
linux
顺风尿一寸1 天前
Java Socket 内核之旅:从 SocketChannel.read() 到 tcp_recvmsg 与 epoll 的完整调用链路
linux
XIAOHEZIcode2 天前
Ubuntu 终端美化全栈指南:Bash 到 Kitty 踩坑实录
linux·ubuntu·命令行
唐青枫2 天前
别再只会用 cron:Linux systemd Timer 定时任务实战详解
linux
AlfredZhao4 天前
生产环境里,为什么不建议把普通端口直接暴露到公网?
linux·https·443·80
戴为沐5 天前
Linux内存扩容指南
linux
zylyehuo5 天前
Linux 彻底且安全地删除文件
linux
用户805533698036 天前
主线 U-Boot 上 RK3506:和闭源 rkbin 拔河的三个隐性契约
linux·嵌入式