clangd下载、配置和使用
- 更新
 - 背景
 - 环境
 - 一.优缺点对比
 - 二.下载
 - 1. ubuntu download clangd
 - 2. vscode download clangd
 - 3. github download clangd
 
- 三.配置
 - 1.简易配置:
 - 2.详细配置
 
- 四.使用
 - 结语:done!!!
 
更新
-  日期:
2024年7月27日
时间:
北京时间:15:30 
背景
- 饱受c/c++摧残,实在无法忍受,换做比较高级的跳转工具clangd,大工程基本上都选用clangd,算是很好的背书。
 
环境
- 环境:vscode ubuntu
 
关键词:clangd, ubuntu,bear,settings.json,compile_commands.json
一.优缺点对比
| tools | 优点 | 缺点 | 
|---|---|---|
| c/c++ | 无需配置 | 速度比较慢,偶尔突然不能用,跳转错文件 | 
| clangd | 响应速度快,不会失灵 | 使用需要手动配置settings.json。跳转依赖compile_commands.json | 
二.下载
官方下载:有各种平台下载clangd
ubuntu or vscode github任选其一即可:
1. ubuntu download clangd
sudo apt-get install clangd-12
 
2. vscode download clangd
Ctrl + Shift + P 打开搜索框 clangd即可下载,速度比较慢、容易下载失败。
vscode默认下载path:~/.vscode-server/data/User/globalStorage/llvm-vs-code-extensions.vscode-clangd/install/18.1.3/clangd_18.1.3/bin/clangd
 
3. github download clangd
clangd
三.配置
不管怎么下载、什么下载方式。无非有的人喜欢最新版本的功能更好,有的人喜欢老版本稳定。主要是配置使用
- 如何找到clangd工具和clangd参数配置,就依赖settings.json文件。
 - 优先级:工作区settings.json > 全局settings.json
 - 一劳永逸:我就想先在工作区验证settings.json文件是否可用,然后添加到全局,这样岂不是就不会每个工程都要添加一遍settings.json文件了,结果验证确实是个好主意(注意:如果想用全局的需要将工作区.vscode/settings.json 删除全局的才会生效)

 
1.简易配置:
下面这个配置用于讲解,具体使用参考如下 2.详细配置
{
    "C_Cpp.intelliSenseEngine": "disabled", // 用于关闭c\c++插件的跳转功能和clangd互斥
    "clangd.path": "clangd", 				// clang path 如果已经添加环境变量直接写可执行文件即可
    										// 
    										// 
    "clangd.arguments": [
        "--compile-commands-dir=${workspaceFolder}/bsp/wuqi", // compile_commands.json path
    ],
}
 
三句话:
 第一句:关闭c/c++插件跳转功能
\\用于关闭c\c++插件的跳转功能和clangd互斥
"C_Cpp.intelliSenseEngine": "disabled" 
 
第二句:让插件知道你的clangd工具绝对路径
// 如果是sudo apt-get install clangd-* 可以使用相对路径,直接填写可执行文件的名字即可(vscode插件下载clangd要使用绝对路径)
// clang path 如果已经添加环境变量直接写可执行文件即可,个别clangd可执行文件叫clangd-10 clangd-12,更改为实际即可
"clangd.path": "clangd"	or 	"clangd.path": "clangd-12"
or
// 填写自己的绝对路径(这里经过测试必须是绝对路径,我使用相对路径clangd无法使用,即使已经添加环境变量)
"clangd.path": "/home/maosql/.vscode-server/data/User/globalStorage/llvm-vs-code-extensions.vscode-clangd/install/18.1.3/clangd_18.1.3/bin/clangd"
 
第三句
// 告诉工具依赖的compile_commands.json文件位置
"--compile-commands-dir=${workspaceFolder}"
 
2.详细配置
使用如下配置,需要更改如下路径改为自己的实际路径即可。
- “clangd.path”: “----clangd path----”
 - “–compile-commands-dir=${workspaceFolder}/—path—”
 
- 上面两条配置好对于跳转已经可以,第三条默认没有打开。
 - 后续所有操作完再回来打开第三条,跳转功能正常再打开这个,因为个人在刚打开时候导致无法跳转,后来开关几次又可以跳转了,为了不影响验证,最后再打开这个配置
 - 填写自己工具链绝对路径或者相对路径
 
- “–query-driver=riscv64-unknown-elf-gcc” 提高补全和诊断的准确性
 
{
    "clangd.detectExtensionConflicts": true,
    "editor.defaultFormatter": "llvm-vs-code-extensions.vscode-clangd",
    "editor.formatOnSaveMode": "modifications",
    "editor.suggest.snippetsPreventQuickSuggestions": false,
    "editor.suggest.showSnippets": true,
    "editor.formatOnPaste": true,
    "editor.formatOnSave": true,
    "editor.formatOnType": true,
    "C_Cpp.intelliSenseEngine": "disabled",
    "clangd.path": "/home/maosql/.vscode-server/data/User/globalStorage/llvm-vs-code-extensions.vscode-clangd/install/18.1.3/clangd_18.1.3/bin/clangd",
    "clangd.arguments": [
        // clangd compilation flags options:
        "--compile-commands-dir=${workspaceFolder}/bsp/wuqi", // compile_commands.json path
        // "--query-driver=riscv64-unknown-elf-gcc",
        // clangd feature options:
        "--all-scopes-completion=true",
        // cope qualifiers
        "--background-index",
        "--background-index-priority=low",
        "--clang-tidy",
        "--completion-style=detailed",
        "--header-insertion=never",
    ],
}
 
四.使用
因为clangd的使用依赖上面提到的compile_commands.json文件,所以使用上就要生成这个文件,生成这个文件需要bear 工具。
sudo apt-get install bear
 
生成compile_commands.json文件无非就是在编译前面加bear就可以
- make
 
bear make -j32
 
- SCons
 
bear scons -j32
 
最后一定要打开搜索框clangd 重启一下clangd server或者关闭从新打开vscode,不出意外的话,你已经可以开心快速跳转了,和c/c++使用上是一样的Ctrl+鼠标就ok了。
 


















