本文主要是介绍Ubuntu+Vscode使用Clangd进行项目代码跳转,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 1. 环境介绍
- 2. bear工具安装
- 3. Clangd插件安装
- 4. Clangd配置
- 4.1方法一:扩展设置
- 4.2 方法二:settings.json配置
- 5. Clangd常用配置参数介绍
- 6. 总结
1. 环境介绍
Linux环境 笔者使用Ubuntu22.04.3
本文章以Windows下的Vscode+ssh到Ubuntu主机为例
Windows Vscode组合WSL也行
2. bear工具安装
bear是一个为clang工具生成编译数据库的工具
sudo apt-get install bear
安装完成后使用**bear --version
**指令查看版本验证是否安装成功!
在编译脚本中make
前添加bear
3. Clangd插件安装
3.1 进入Vscode
使用ssh
连接到Ubuntu
;
进入扩展程序,在远程路径ssh中安装Clangd
和Clang-Format
3.2 在linux环境下也安装clangd
sudo apt-get install clangd//安装clangd
检查安装是否成功:
clangd --version
4. Clangd配置
4.1方法一:扩展设置
- 添加Clangd的绝对路径
/usr/bin/clangd
,以自己安装路径为准
Clangd:Arguments
和Clangd:Fallback Flags
配置根据自己需要添加
下文第五节会介绍各项什么含义:
4.2 方法二:settings.json配置
上图配置也可在工程下的.vscode
->settings.json
中进行添加,如果Vscode没有生成settings.json配置文件可以自行添加:
在settings.json中按如下格式进行添加配置:
{"clangd.arguments": ["--compile-commands-dir=build","--log=verbose","--header-insertion=never","--query-driver=省略",],"clangd.fallbackFlags": ["-I${workspaceFolder}/include.",],"git.ignoreLimitWarning": true,"clangd.path": "/usr/bin/clangd",
}
配置完成后编译即可,如果还是不行尝试Reload一下工程
如果使用clangd解析compile_commands.json失败,报error: invalid AST错误
解决方法:在编译目录创建.clangd
文件,内容如下:
CompileFlags:Add: -Wno-unknown-warning-optionRemove: [-m*, -f*]
如若仍然不行,C一下,站上有很多配置方案可解
5. Clangd常用配置参数介绍
Vscode的Cangd插件配置项简介:
clangd.arguments
: clangd服务运行时传递给可执行文件的参数
clangd.fallbackFlags
: 设置头文件搜索路径
clangd.path
: clangd的可执行文件路径
clangd.detectExtensionConflicts
: 设置clangd是否检测扩展的冲突
clangd.serverCompletionRanking
: 设置是否在键入时,对补全结果进行排序。
1.较为全面的Clangd配置:
{"clangd.arguments": [// 在后台自动分析文件(基于complie_commands)"--background-index",// 标记compelie_commands.json文件的目录位置"--compile-commands-dir=build",// 同时开启的任务数量"-j=12",// 告诉clangd用那个clang进行编译,路径参考which clang++的路径"--query-driver=/usr/bin/clang++",// clang-tidy功能"--clang-tidy","--clang-tidy-checks=performance-*,bugprone-*",// 全局补全(会自动补充头文件)"--all-scopes-completion",// 更详细的补全内容"--completion-style=detailed",// 补充头文件的形式"--header-insertion=iwyu",// pch优化的位置"--pch-storage=disk"],"clangd.fallbackFlags": ["-I${workspaceFolder}/include"],// "clangd.path": "the/path/to/clangd/executable/on/windows","clangd.detectExtensionConflicts": true,"clangd.serverCompletionRanking": true, "git.ignoreLimitWarning": true,"clangd.path": "/usr/bin/clangd",}
- 简易版本,只需要基本代码的跳转
{"clangd.arguments": ["--compile-commands-dir=","--log=verbose","--header-insertion=never","--query-driver=",],"clangd.fallbackFlags": ["-I${workspaceFolder}/include"],"git.ignoreLimitWarning": true,"clangd.path": "/usr/bin/clangd",
}
6. 总结
Clangd原理及流程
Which is Clangd?
流程bear 生成 compile_commands.jsonubuntu 上的 clangd server 解析 compile_commands.json 和 编译代码 , 并生成idx , 并监听 clangd client(vscode 插件clangd)的请求// 生成idx的时候会出现一些问题.参考 error fixvscode 中的clangd 向 clangd server 发送 (符号信息), 获取 到 (代码信息和位置)
本质:clangd 作为 服务器, 客户端可以是 vscode 的插件clangd,也可以是 vim的插件 vim-clangd/coc-langd/YouCompleteMe/ALE ... 其他编辑器的插件可更改clangd服务器的位置,但是要保证被vscode识别(放到PATH中)
这篇关于Ubuntu+Vscode使用Clangd进行项目代码跳转的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!