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

相关推荐
HLC++22 分钟前
Linux的进程间通信
android·linux·服务器
AI的探索之旅4 小时前
AI辅助原理图评审:电源去耦、BOOT引脚、VCAP——19项逐一核查,遗漏?不存在的
人工智能·vscode·嵌入式硬件
groundhappy4 小时前
idalib安装和codex ida-mcp配置
linux·开发语言·python
通信小小昕5 小时前
Ubuntu 26.04 中文输入法安装
linux·运维·ubuntu
张小姐的猫6 小时前
【Linux】网络编程 —— HTTP协议(上)
linux·运维·服务器·网络·http·单例模式·策略模式
栩栩云生6 小时前
AI 写代码犯的错,早被写进了错题集
linux·安全·ai编程
imc.117 小时前
linux基础IO
linux·运维·服务器
BelongPanda9 小时前
Linux Nginx 纯手动 Let‘s Encrypt 泛域名证书配置教程
linux·nginx
酷可达拉斯10 小时前
Linux操作系统-shell编程(0)
linux·运维·服务器·python·云计算
2301_7779983410 小时前
Linux中断机制:操作系统如何高效运行
linux·运维·服务器