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

相关推荐
Lehjy4 小时前
【Linux】文件系统磁盘存储结构
android·linux·运维
wzhao1014 小时前
Relink 0.15.1:一个 no_std 的 ELF 加载器/链接器
linux·rust·gnu
何中应5 小时前
服务器之间如何免密连接
linux·服务器·ssh
zzzsde5 小时前
【Linux】线程同步和互斥(1):线程互斥与加锁实现
linux·运维·服务器·开发语言·算法
Bert.Cai5 小时前
Linux iconv命令详解
linux·运维·服务器
WangLanguager5 小时前
Linux命令chfn(change finger information) 详细介绍
linux·运维·服务器
Vodka~5 小时前
一根网线——Windows共享网络给Linux访问互联网
linux·网络·windows
CHANG_THE_WORLD6 小时前
PE 文件 数据目录
linux·服务器·数据库
灵晔君6 小时前
【Linux】进程(三)——进程切换、O (1) 调度、环境变量、命令行参数
linux·运维·服务器
林熙蕾LXL6 小时前
进程间通信
linux