背景:

最近从Clion切换到了vscode来进行代码开发,发现vscode自带的c/c++插件除了能够使用debug功能,其余代码补全,跳转等功能都和基于clangd的clion有较大差距,经常出现匹配不上或者跳转不准确的问题,在这背景下自己折腾了两天切换到了基于clangd来配置(事实上vim中的youcompleteme也已经基于clangd来实现c/c++的代码的补全

配置方法:

首先在vscode的插件商店中搜索clangd,并安装。

安装完成后,打开一个已有的工程:

如以下是一个最简单的项目:

这里使用CMake来配置项目,事实上可能还存在其他比如bazel,scons,make等项目配置工具:

而clangd是基于compile_commands.json文件来完成对项目的解析,并支持代码补全和跳转。

这里记录一下三种生成方式:

1.在CMakeLists.txt文件中添加set(CMAKE_EXPORT_COMPILECOMMANDS ON),之后cd build && cmake .. ,可以发现在build目录下已经生成了compile_commands.json文件

2.如果是基于make方式来编译,那么可以先安装 pip install compiledb,之后在当前目录下运行(1) compiledb -n make -C build (2) compiledb make -C build 这两个命令中的其中一个来生成compile_commands.json文件,其中前者不会执行真正的make编译命令

3.如果是基于其他方式,可以使用https://github.com/rizsotto/Bear 项目中的方式来生成对应的compile_commands.json文件

通过以上方式生成完后compile_commands.json文件后,可以在vscode中对clangd的参数进行配置,可以使用clangd --help来获取一些有用的参数:下面给出我实际的配置:

其中第一个是指定配置文件所在目录,第二个是代码补全的时候完全显示函数的参数类型,而第三个则是避免clangd自动引入一些函数依赖的头文件。

在完成以上配置后,就可以愉快的使用clangd进行代码补全了跳转了!

可以看出在下图复杂的工程内部,函数的补全和跳转支持也是十分精准的!

(已知的issue,在和微软的c/c++一起工作时,会提示不正常,因此使用clangd时需要完全关闭c/c++的代码补全等一系列功能,只是将c/c++插件作为debug使用即可)

vscode 头文件包含问题_使用clangd替代c/c++配置vscode c++项目相关推荐

  1. vscode 头文件包含问题_WSL+VSCode = Linux ?

    官方文档​code.visualstudio.com 使用VSCode新推出的Remote功能来连接WSL或服务器进行开发. 可以在Windows上享受优秀的界面体验的同时使用Linux环境进行开发( ...

  2. C语言中头文件包含的处理原则

    很多事不深入以为自己懂了,但真正用到项目上,才发现了问题.曾以为自己写C语言已经轻车熟路了,特别是对软件文件的工程管理上,因为心里对自己的代码编写风格还是有自信的.(毕竟刚毕业时老大对我最初的训练就是 ...

  3. 【C/C++】头文件包含之#include的2种用法区别

    在C/C++工程中,常会碰到头文件包含的使用,#include <>和#include " "两者之间的区别,简而言之如下: 1. #include <> ...

  4. C++编程中的头文件包含问题

    一,最好在一个头文件中将系统中所有的头文件包含进来,然后在每个头文件中将这个文件引用进来.如在vs环境下就是stdfax.h文件. 二,在每个头文件中用 #ifndef XXXX #define XX ...

  5. C语言之预处理探究(三):头文件包含

    相关博文:C语言之预处理探究(四):#.##和预定义宏 相关博文:C语言之预处理探究(二):条件编译(Condition Compile) 相关博文:C语言之预处理探究(一):宏 参考博文:C语言的头 ...

  6. 嵌入式开发(S5PV210)——u-boot的头文件包含问题

    前言 uboot和kernel的头文件包含比一般的程序更复杂,将头文件的路径用链接来表示,这样的用意是为了程序的可移植性.uboot是高度可移植的,不同的配置和编译指令可以编译出不同Soc和开发板的程 ...

  7. ZT 头文件包含其实是一想很烦琐的工作 第一个原则应该是,如果可以不包含头文件...

    当出现访问类的函数或者需要确定类大小的时候,才需要用头文件(使用其类定义)    http://blog.csdn.net/clever101/article/details/4751717 看到这个 ...

  8. c语言头文件包含嵌套问题和包含原则

    a.h #include<stdio.h> #ifndef _A_H #define _A_H 只是解决头文件重复包含的问题的,但是头文件嵌套包含,就不代表不会出问题,就会关系错综复杂,出 ...

  9. 哪些是MySQL用于放置一些头文件的目录_在古希腊的知识体系中,两大部分是( )。...

    [单选题]注册会计师测试库存现金余额的起点是( ). [多选题]审计人员针对融资租入固定资产实施审计程序时,除可以参照经营租赁相关审计程序外,还应审查( ). [单选题]关于月经的描述,正确的是 [多 ...

最新文章

  1. Python给数字前固定位数加零或数字前置保留0
  2. 解密京东618大促数据库运维的攻守之道
  3. DNS基本原理与配置
  4. python实现终端3维数据可视化
  5. JavaScriptjQuery.stopPropogation()
  6. 重温Android四大组件(一)—Activity的生命周期
  7. Java 如何将String转化为Int
  8. java 枚举类 扑克牌_Java中的枚举和多态,扑克牌示例
  9. 一个简单的方式搞定密码的加盐哈希与验证
  10. CSS 的三种样式 内联 内部 外部
  11. Java基础知识强化38:StringBuffer类之StringBuffer的添加功能
  12. MFC操作读取excel文件
  13. app渗透实战案例—Spring Boot Actuator未授权到脱库
  14. QQ空间自动点赞脚本1
  15. rac多scan-ip配置
  16. lintcode刷题——罗马数字转整数
  17. 含辞未吐,声若幽兰,史上最强免费人工智能AI语音合成TTS服务微软Azure(Python3.10接入)
  18. 动态规划-切木头问题(代码实现)
  19. USACO CONTEST FEB07 白银莲花池 silvlily 分析
  20. 多传感器信息融合及应用(何友等著)一至四章节读书笔记

热门文章

  1. 揭秘 RocketMQ 新特性以及在金融场景下的实践
  2. 云解析DNS能为你做什么?
  3. 云上快速搭建Serverless AI实验室
  4. 华为庞鑫:闪存3.0时代,四大变化激发全闪存数据中心潜能释放
  5. 这 10 个云计算错误,会让你的业务一蹶不振!
  6. 为什么说「中台」程序员将来会最值钱?
  7. Elastic全球用户大会Elastic{ON}首次落地北京
  8. centos标准分区调整大小_CentOS下调整home和根分区大小的方法
  9. html查看程序魅族,怎么查看源代码(什么工具能查出一个程序的代码)
  10. java 判断日期连续_如何在Java中检查日期是否大于另一个日期?[重复]