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通信文件了。

相关推荐
Maple_land9 小时前
Linux复习:冯·诺依曼体系下的计算机本质:存储分级与IO效率的底层逻辑
linux·运维·服务器·c++·centos
李的阿洁10 小时前
k8s中的容器服务
linux·容器·kubernetes
谢景行^顾10 小时前
数据结构知识掌握
linux·数据结构·算法
人工智能训练11 小时前
如何在 Ubuntu 22.04 中安装 Docker 引擎和 Linux 版 Docker Desktop 桌面软件
linux·运维·服务器·数据库·ubuntu·docker·ai编程
口袋物联12 小时前
图解码说-六大设计原则(开闭原则、单一职责原则、里氏替换原则、接口隔离原则、依赖倒置原则、迪米特法则)
接口隔离原则·依赖倒置原则·里氏替换原则·开闭原则·单一职责原则·设计模式原则·迪米特法原则
Maple_land12 小时前
Linux复习:系统调用与fork
linux·运维·服务器·c++·centos
无聊的小坏坏12 小时前
Poll 服务器实战教学:从 Select 迁移到更高效的多路复用
linux·服务器·poll·io多路复用
WAsbry13 小时前
InputConnection机制与跨进程文本操作的工程实践
android·linux
wdfk_prog13 小时前
[Linux]学习笔记系列 -- [kernel]cpu
linux·笔记·学习
WAsbry13 小时前
从一个Bug看Android文本编辑的设计缺陷
android·linux