vscode + clangd 开发 c\c++

14 篇文章 0 订阅
4 篇文章 0 订阅


强烈推荐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

  • 20
    点赞
  • 91
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
VSCode是一款轻量级的代码编辑器,而clangd是Clang提供的一个语言服务器,用于提供C/C++代码的智能补全、代码导航、重构等功能。通过在VSCode中配置clangd,可以使得在C/C++开发中拥有更好的开发体验。 以下是配置VSCodeclangd的步骤: 1. 安装VSCode:前往VSCode官网下载并安装最新版本的VSCode。 2. 安装C/C++扩展:在VSCode中搜索并安装C/C++扩展,该扩展提供了对C/C++语言的支持。 3. 安装clangd:根据操作系统选择合适的方式安装clangd。在Windows上,可以通过MSYS2或者Scoop来安装clangd。在MacOS上,可以通过Homebrew来安装clangd。 4. 配置clangd路径:在VSCode中打开设置(快捷键Ctrl + ,),搜索"C_Cpp: Clangd Path",将clangd的路径配置到该设置项中。 5. 配置编译器路径(可选):如果你的项目需要使用特定的编译器,可以在VSCode中打开设置,搜索"C_Cpp: Default Compiler Path",将编译器的路径配置到该设置项中。 6. 打开C/C++项目:在VSCode中打开你的C/C++项目文件夹。 7. 配置编译选项(可选):如果你的项目需要特定的编译选项,可以在项目文件夹中创建一个名为".vscode"的文件夹,并在该文件夹中创建一个名为"c_cpp_properties.json"的文件。在该文件中配置你的编译选项。 8. 开始使用clangd:现在,你可以在VSCode中开始使用clangd提供的功能了。例如,当你输入代码时,clangd会自动提供代码补全建议;当你点击函数或变量时,clangd会提供相关的定义和引用;当你重构代码时,clangd会提供重构建议等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值