vscode + clangd 开发 c\c++

2023-05-16

目录标题

  • 背景
  • LSP
  • Clangd
    • quick fix
    • IWYU
    • clang-tidy
  • 环境配置
    • 插件配置
    • 语言服务器下载
    • 自定义配置
    • 生成compile_command.json
      • makefile生成compile_command.json

强烈推荐clangd!微软官方的插件一言难尽,原来没有对比就凑活用得了,有对比以后,简直没办法忍受。

背景

vscode c++开大家一般用 vscode 自家出品的c++插件,如下

在这里插入图片描述
网络大部分的vcscode c++ 环境搭建也都是讲这个插件的配置,用于提供悬浮提示,代码补全,错误提示,定义声明实现之间的项目跳转等等功能。
我之前也是用这个插件开发,非常难用,和一些更现代化的IDEA有不小差距。

先不说导航找实现找引用这种语义分析的基本功能有时候都没办法正确找到实现,速度也一般般,错误和警告也只是有提示,没有quick fix功能,这个功能是能极大提高编程手感的东西,非常好用,可惜用不得。

LSP

LSP(Language Server Protocol)开源的语言服务器协定。由红帽、微软和 Codenvy 联合推出,可以让不同的程序编辑器与集成开发环境(IDE)方便嵌入各种程序语言,允许开发人员在最喜爱的工具中使用各种语言来撰写程序。

个人暂时没有去细致了解其中细节,lsp只是一种编辑器和语言服务器(language server)之间的一套协议罢了,编辑器通过lsp将代码传给语言服务器做语义分析,语言服务器在根据lsp传给编辑器做渲染解析或者异常提示之类的。
lsp做了一个中间人适配器的角色,以避免不同后端语言+不同编辑器,不同组合都得重复开发的问题

当然以上只要大概知道lsp是啥就行了。

然后发现c++ 的语言服务器实现lsp,比较常见的就是以下三个。

  • ms-vscode.cpptools
  • clangd
  • ccls

在这里插入图片描述

实现了的LSP的语言服务器列表

Clangd

clangd官网介绍

看了半天,挑了clangd,代码补全之类的基本的功能就不提了,吸引我的主要是clangd几个特性特别强大,牛逼就完事了。

另外find reference之类的命令明显比cpp tools快的多。

不过主要针对CMAKE管理的项目,因为要生成一个compile_command.json的文件,其他的makefile之类的项目生成这个文件比较麻烦。

quick fix

对于一些常用错误,他可以提供快速修改功能,比如漏了命名空间啥的,或者对于一些三方组件没记得太清楚是属性(a.data())还是数据成员(a.data)这种错误,可以提供快速修复方案。
在这里插入图片描述

IWYU

include-what-you-use,又是一个非常给力的一个功能。
比如写个mutex,我们必须自己手动转到文件顶部手动include,有时候有些还得查查需要的头文件名叫啥,代码写起来就是不丝滑爽快。

有了IWYU,就可以自动添加头文件,这种写代码你就可以专注于业务,减少找头文件切换行include的操作,非常好用。
在这里插入图片描述
在这里插入图片描述

clang-tidy

集成了clang-tidy,基于AST的静态检查工具,提供繁多的检查项,一些常见bug,大小驼峰之类的命名规范,性能提升建议,内容很多,可以自行了解,大部分vscode支持。
clang-tidy list

在这里插入图片描述
如上图,检查出一个死循环bug。不过部分checks vscode不支持显示,比如上面的DivideZero没有提示,手动调用LLVM全家桶里面的clang-tidy是支持该check,但是vscode不显示。

不清楚是clangd集成的clang-tidy阉割了还是vscode的问题,不过锦上添花的东西无伤大雅。
在这里插入图片描述

环境配置

特性了解完了,就开整吧。

插件配置

在这里插入图片描述
安装如图插件。
插件设置如下,特性拉满。

    "clangd.arguments": [
        "--background-index",
        "--compile-commands-dir=build",  //compile_command.json相对路径,cmake默认生成在build,自行配置
        "-j=12",
        "--all-scopes-completion",
        "--completion-style=detailed",
        "--header-insertion=iwyu",
        "--pch-storage=memory",
        "--cross-file-rename",
        "--enable-config",
        "--fallback-style=WebKit",
        "--pretty",
        "--clang-tidy"
        // 网上别人配置clang++,但我这边windows、linux实测不加这行也没啥问题,可能mac可能需要另外加
    	"--query-driver=clang++",
    ],

语言服务器下载

ctrl + shift + p 调用
在这里插入图片描述

下载安装完完提示重启vscode,没啥需要手动配的,有时候会下载安装失败,多试几次就好。

当然下载官网LLVM全家桶也是可以的。

自定义配置

剩下的是一些个人喜好的配置了。
在这里插入图片描述

自用配置,看个人喜好,具体语法可以看官网介绍。

CompileFlags:                             
    Add: 
      [
        -std=c++14,
        -Wno-documentation,
        -Wno-missing-prototypes,
      ]
Diagnostics:
  ClangTidy:
    Add:
    [
        performance-*,
        bugprone-*,
        modernize-*,
        clang-analyzer-*,
        readability-identifier*,
    ]
    CheckOptions:
      readability-identifier-naming.VariableCase: camelCase

生成compile_command.json

vs的generater 无法生成该文件,换其他的Ninja 之类的gennerater

clangd需要根据该文件获取各个文件的include path,以及编译警告错误之类的,必须要有这个文件

如果使用了 cmake tool,可以用以下配置生成。
在这里插入图片描述

也可以

cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=1

又或者在cmakelist里面

set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

都是一样的。

生成的内容大致如下

[
  { "directory": "/home/user/llvm/build",
    "command": "/usr/bin/clang++ -Irelative -DSOMEDEF=\"With spaces, quotes and \\-es.\" -c -o file.o file.cc",
    "file": "file.cc" },
  ...
]

这样配置下来,,再禁用vs cpptools 的自动补全(补全会冲突),当然你没有debug的需求的话,可以直接删除cpptools。

这样就可以愉快的使用clangd的特性进行开发了。

makefile生成compile_command.json

makefile生成compile_command.json

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vscode + clangd 开发 c\c++ 的相关文章

随机推荐

  • matlab二维矩阵可视化几种方法

    目录 一 pcolor 二 imagesc 三 spy 四 文末彩蛋 一 pcolor 以一个100x100块对角矩阵B为例 1 xff1a 原生pcolor 可以在矩阵维度不大时进行可视化 xff0c 带小方格 矩阵比较大时画出整体为黑色
  • 【ROS入门】双系统安装和ros安装踩坑

    记录一下安装Ubuntu双系统和和ros过程中踩的坑 xff0c 防止下次再犯错 一 双系统安装与删除 双系统的安装比一开始想的说实话要简单得多 xff0c 随便用u盘制作一个系统安装盘 xff0c 或者在u盘里面放需要的Ubuntu镜像
  • 【ROS入门】TF与URDF

    一 什么是TF TF全程就是transform xff0c 就是一个坐标系的转换 在ROS中坐标的转换是一个很重要的内容 xff0c 主要还是因为机器的不灵活性 xff0c 如果是人 xff0c 完全可以灵活地控制手臂去抓取一个物体 xff
  • 树莓派3B+——系统安装及显示

    树莓派3B 43 系统安装及显示 目录 树莓派3B 43 系统安装及显示系统安装显示显示器显示3 5寸显示屏显示pc显示 树莓派3B 43 系统安装及显示 初次接触树莓派 xff0c 花了差不多一天的时间把系统的安装和显示全部搞定 xff0
  • VSLAM 相关知识点总结

    VSLAM 相关知识点 这篇文章是对VSLAM涉及的知识点进行系统性的总结和更新 xff0c 一些内容来源至VSLAM经典教材 xff0c 博客 xff0c 和开源项目 引用材料如下表 SLAM十四讲高博古月老师的技术博客崔神的github
  • Windows下CLion中文乱码最有效的解决方式

    作者开发环境 Windows 10 Clion 18 3 MinGW W64 很多人都遇到了Clion的中文乱码问题 xff0c 然后在CSDN上面寻找解决办法 比如这篇很有代表性https blog csdn net Cbk XLL ar
  • Neutron复盘及学习笔记

    前言 对于openstack neutron xff0c 曾花费很多的时间去看它的源码 xff0c 结果啥都没有看出来 openstack代码风格是 xff0c 为了实现plugin的可插拔 xff0c 运用了很多设计模式 xff0c 设计
  • 匿名飞控底层PID代码解析

    大半年就快过去了 大二上学期转瞬即逝 xff0c 离上一次博客也有一段时间了 xff0c 没错 xff0c 庆幸的是我又回来了 xff0c 其实本来第二篇博客是想着写一下两轮平衡车来着 xff0c 代码早就写好了 xff0c 但是硬件不给力
  • IAR、KEIL常见编译报错警告的解决方法(持续更新中)

    Warning Pe550 variable 变量 was set but never used 原因 xff1a 变量定义赋值了但从未使用 解决 xff1a 变量定义删了就可以 xff0c 编译器也不会真的给这个变量分配空间 Warnin
  • VS2019 未能正确加载”balabal.........Package“

    修复VS2019不能自动补全Unity脚本代码时 xff0c 更新了下面这个东西 导致一直蹦下面这些警告 嘣 嘣 嘣 嘣 嘣 网上有很多博客说重置用户数据 禁用Live Share 分析Log信息等等 xff0c 最后看到一个博文说检查更新
  • 51单片机 | 蜂鸣器实验

    文章目录 一 蜂鸣器介绍二 硬件设计三 软件设计四 实验现象 通过单片机的一个 IO 口控制 板载无源蜂鸣器 xff0c 实现蜂鸣器控制 一 蜂鸣器介绍 蜂鸣器是一种一体化结构的电子讯响器 xff0c 采用直流电压供电 xff0c 广泛应用
  • Vue 中WebSocket的使用

    span class token function data span span class token punctuation span span class token punctuation span span class token
  • npm版本与node版本不对应

    npm与node版本不对应 导致无法npm i 报错提示 WARNING You are likely using a version of node tar or npm that is incompatible with this ve
  • 吴恩达阅读文献步骤

    接下来 xff0c 就集中介绍一下如何研究一篇论文 吴恩达认为 xff0c 要理解一篇论文 xff0c 一次将一篇论文从第一个字读到最后一个字 xff0c 可能并不是最佳方式 正确的打开方式是 xff0c 一篇论文至少要看三遍 第一遍 xf
  • 更新docker

    以下是做为前端开发如何更新docker xff0c 萌新操作 1 xff0c 使用工具Finalshell xff0c 连接到ssh 2 xff0c 连接到服务器 xff0c 选择ssh xff0c 并配置服务名称 主机 服务地址 xff0
  • 计算机视觉理论笔记 (11) - 运动估计 (Motion Estimation)

    运动估计 光流法 Optical Flow 限制Horn xff06 Schunck 全局方法 global method 光流法约束等式 Constrain Equation 小幅度动作问题全局方法和局部方法的比较全局方法局部方法 基于块
  • 嵌入式,面试题目网页搜集

    指针笔试题 嵌入式面试
  • Java第一天笔记02——eclipse的常用快捷键

    1 main方法 main 43 Alt 43 2 System out println syso 43 Alt 43 3 批量修改 Alt 43 Shift 43 R 4 for for 43 Alt 43 5 代码格式化 Ctrl 43
  • FREERTOS源码解析——heap4.c

    目录 内存管理heap4无法解决的内存碎片 xff1a HEAP4简析分配内存在哪 xff0c 大小多少如何管理 重要源码解析 内存管理 freertos目前提供了以下5种内存管理 xff0c 特点如下 heap1 xff1a 最简单的内存
  • vscode + clangd 开发 c\c++

    目录标题 背景LSPClangdquick fixIWYUclang tidy 环境配置插件配置语言服务器下载自定义配置生成compile command jsonmakefile生成compile command json 强烈推荐cla