当前位置: 首页 > news >正文

clangd配置

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
download clangd

3. github download clangd

clangd

三.配置

不管怎么下载、什么下载方式。无非有的人喜欢最新版本的功能更好,有的人喜欢老版本稳定。主要是配置使用

  • 如何找到clangd工具和clangd参数配置,就依赖settings.json文件。
  • 优先级:工作区settings.json > 全局settings.json
  • 一劳永逸:我就想先在工作区验证settings.json文件是否可用,然后添加到全局,这样岂不是就不会每个工程都要添加一遍settings.json文件了,结果验证确实是个好主意(注意:如果想用全局的需要将工作区.vscode/settings.json 删除全局的才会生效)
    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.详细配置

使用如下配置,需要更改如下路径改为自己的实际路径即可。

  1. “clangd.path”: “----clangd path----”
  2. “–compile-commands-dir=${workspaceFolder}/—path—”
  • 上面两条配置好对于跳转已经可以,第三条默认没有打开。
  • 后续所有操作完再回来打开第三条,跳转功能正常再打开这个,因为个人在刚打开时候导致无法跳转,后来开关几次又可以跳转了,为了不影响验证,最后再打开这个配置
  • 填写自己工具链绝对路径或者相对路径
  1. “–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了。
reset clangd

结语:done!!!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • vue - devtools 安装
  • MacOS DockerDesktop配置文件daemon.json的位置
  • MakeReal3D v5.0 爆炸视图
  • 基于springboot+vue+uniapp的校园二手交易小程序
  • K8s大模型算力调度策略的深度解析
  • 使用 AI 支持的元描述生成器提升SEO效果
  • Bugku-ctf-web-eval
  • C# 调用Webservice接口接受数据测试
  • hcip学习 DHCP中继
  • 防洪评价报告编制方法与水流数学模型建模技术
  • mysql+php+html实现学生管理系统
  • LangChain的embeddings结合向量数据库Weaviate接入ChatGPT-4、智普和通义千问
  • 命令行使用ADB,不用root,完美卸载小米预装软件
  • nginx代理服务地址时添加帐号密码认证
  • 解决mysql事件调度器重启服务后自动失效的问题
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • 08.Android之View事件问题
  • docker-consul
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • Java超时控制的实现
  • Nacos系列:Nacos的Java SDK使用
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 基于 Babel 的 npm 包最小化设置
  • 将 Measurements 和 Units 应用到物理学
  • 前端面试之CSS3新特性
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 一、python与pycharm的安装
  • nb
  • # 职场生活之道:善于团结
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • $$$$GB2312-80区位编码表$$$$
  • (3)选择元素——(17)练习(Exercises)
  • (6)设计一个TimeMap
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (Java)【深基9.例1】选举学生会
  • (k8s)Kubernetes 从0到1容器编排之旅
  • (离散数学)逻辑连接词
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (十八)三元表达式和列表解析
  • (一) 初入MySQL 【认识和部署】
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .Net CF下精确的计时器
  • .NET Core 中插件式开发实现
  • .Net Web窗口页属性
  • .net 简单实现MD5
  • .NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 WeakDictionary)
  • .net6Api后台+uniapp导出Excel
  • .NET设计模式(11):组合模式(Composite Pattern)
  • .NET学习教程二——.net基础定义+VS常用设置
  • //usr/lib/libgdal.so.20:对‘sqlite3_column_table_name’未定义的引用
  • @modelattribute注解用postman测试怎么传参_接口测试之问题挖掘
  • [2015][note]基于薄向列液晶层的可调谐THz fishnet超材料快速开关——