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中安装ClangdClang-Format
在这里插入图片描述
3.2 在linux环境下也安装clangd

sudo apt-get install clangd//安装clangd

检查安装是否成功:

clangd --version

在这里插入图片描述

4. Clangd配置

4.1方法一:扩展设置

  1. 添加Clangd的绝对路径/usr/bin/clangd,以自己安装路径为准
    在这里插入图片描述
  2. Clangd:ArgumentsClangd: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",}
  1. 简易版本,只需要基本代码的跳转
{"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中)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/697287.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2023年数维杯国际大学生数学建模挑战赛B题棉花秸秆热解的催化反应解题全过程论文及程序

2023年数维杯国际大学生数学建模挑战赛 B题 棉花秸秆热解的催化反应 原题再现: 随着全球对可再生能源需求的不断增加,生物质能作为一种成熟的可再生能源得到了广泛的关注。棉秆作为一种农业废弃物,由于其富含纤维素、木质素等生物质成分&am…

Docker安装、使用及常用命令

一、Docker是什么? Docker是一种开源的容器化技术,允许开发者将应用及其运行环境打包在一个轻量级、可移植的容器中。这样,不论在开发、测试还是生产环境中,应用都能在任何Docker支持的平台上无缝运行。Docker使用Dockerfile来自…

【鸿蒙开发】第二十四章 IPC与RPC进程间通讯服务

1 IPC与RPC通信概述 IPC(Inter-Process Communication)与RPC(Remote Procedure Call)用于实现跨进程通信,不同的是前者使用Binder驱动,用于设备内的跨进程通信,后者使用软总线驱动,…

Python语言基础与由来介绍【自我维护版】

各位大佬好 ,这里是阿川的博客 , 祝您变得更强 个人主页:在线OJ的阿川 大佬的支持和鼓励,是我成长路上最大的动力 阿川水平有限,如有错误,欢迎大佬指正 本篇博客是在已有的博客的基础上进行的维护。 目录…

Spring框架深度解析:打造你的Java应用梦工厂

想要在Java企业级应用开发中大展身手?Spring框架的核心容器是你不可或缺的伙伴! 文章目录 一. 引言1.1 介绍Spring框架的重要性1.2 阐述核心容器在Spring框架中的作用1.3 故事开端 二. 背景介绍2.1 描述Spring框架的发展历程2.2 概述Spring框架的主要特点…

Scala、Spark SQL 常用方法

目录 数组常用方法 列表操作常用方法 Scala中常用的查看列表元素的方法有head、init、last、tail和take()。 合并两个列表还可以使用concat()方法。 集合操作常用方法 map()方法 foreach()方法 filter()方法 flatten()方法 groupBy()方法 ​编辑 从内存中读取数据创建…

立聪堂助听器29周年暨第九届助听使者活动圆满落幕

5月10日对于立聪堂来说是个特别的日子,这家专注于听力健康领域的公司迎来了29周年。同时,立聪堂第九届助听使者代表及其家人也受邀参观立聪堂南京总部,共庆29周年。 易被忽视的老人听力健康 大数据显示,我国65岁以上老人&#x…

如何查看centos7中Java在哪些路径下

在 CentOS 7 上,你可以通过几种方式查找安装的 Java 版本及其路径。以下是一些常用的方法: 1. 使用 alternatives 命令 CentOS 使用 alternatives 系统来管理同一命令的多个版本。你可以使用以下命令来查看系统上所有 Java 安装的配置: su…

力扣75. 颜色分类

Problem: 75. 颜色分类 文章目录 题目描述思路及解法复杂度Code 题目描述 思路及解法 由于题目只提供0,1,2分别代表颜色红、白、蓝,并按此排序,那么我们可以遍历两次数组,第一次将0,全部放到数组前面一部分…

【电路笔记】-无源带通滤波器

无源带通滤波器 文章目录 无源带通滤波器1、概述2、二阶带通滤波器的频率响应3、带通滤波器示例4、总结无源带通滤波器可以通过将低通滤波器与高通滤波器连接在一起制成。 1、概述 无源带通滤波器可用于隔离或滤除特定频带或频率范围内的某些频率。 简单 RC 无源滤波器中的截止…

【Qt】常用控件(一)

文章目录 一、核心属性1、enabled代码示例: 通过按钮2 切换按钮1 的禁用状态 2、geometry代码示例: 控制按钮的位置代码示例:window frame 的影响代码示例: 感受 geometry 和 frameGeometry 的区别 3、windowTitle4、windowIcon代码示例: 通过 qrc 管理图片作为图标…

找不到iutils.dll怎么解决,需要如何修复

iutils.dll 是一个系统级的动态链接库(Dynamic Link Library)文件,通常与Windows操作系统中的应用程序运行密切相关。动态链接库文件如同一个代码库,存储了多个程序可以共享的功能和指令。iutils.dll具体提供了哪些功能可能依据它…