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

背景:

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

配置方法:

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

d2b676cdfdc1dc04f83bfd268ef804a4.png

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

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

bdaddddac00a9e25245f4655abfb38d9.png

这里使用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来获取一些有用的参数:下面给出我实际的配置:

6bd891825e5c8a5a4027ca830c7392a4.png

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

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

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

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

d297d0afd9542ed654dda80c71408670.png

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

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

相关文章

微服务拆分需要考虑的必要因素与坚持原则

前言:创业公司往往因为有限的时间和投入,把系统所有的功能都聚集在一起。随着业务的不断发展,技术人员开始不断地对架构进行解耦和拆分。微服务在最近几年大行其道,很多公司的研发人员都在考虑微服务架构,或者在做微服…

android如何建立全局变量,如何在Android中声明全局变量?

我正在创建一个需要登录的应用程序。 我创建了主要和登录活动。在主要活动onCreate方法中我添加了以下条件:public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);...loadSettings();if(strSession…

data后缀文件解码_Java语法进阶13-文件、IO流

FileFile是文件和目录路径名的抽象表示形式,即File类是文件或目录的路径,而不是文件本身,因此File类不能直接访问文件内容本身,如果需要访问文件内容本身,则需要使用输入/输出流。File类的对象用来表示文件和文件夹的对…

中小型互联网公司微服务实践-经验和教训

上次写了一篇文章叫Spring Cloud在国内中小型公司能用起来吗?介绍了Spring Cloud是否能在中小公司使用起来,这篇文章是它的姊妹篇。其实我们在这条路上已经走了一年多,从16年初到现在。在使用Spring Cloud之前我们对微服务实践是没有太多的体会和经验的…

android图片适配到裁剪框,Android图片剪裁-调用系统实现,完美适配魅族等机型

System-Photo-CropperAndroid System Photo Cropper 使用系统原生的图片剪裁库,完美适配魅族等机型Step 1First you need a sysPhotoCropper to handle the activity results of cropping photos.Overrideprotected void onActivityResult(int requestCode, int res…

php程序里的configini_程序员手册 修改php.ini的几种方法

修改php.ini配置文件的几个函数先做一下介绍:php中修改php配置文件(php.ini)的函数主要有四个函数:ini_get、ini_set、ini_get_all、ini_restore。其中ini_set和ini_get比较常用,下面分别做介绍。(1)ini_get()用来获取配置文件的选项值.这个函数很多人都使过&#x…

对于机器学习,到底该选择哪种编程语言

开发者到底应该学习哪种编程语言才能获得机器学习或数据科学这类工作呢?这是一个非常重要的问题。我们在许多论坛上都有讨论过。现在,我可以提供我自己的答案并解释原因,但我们先看一些数据。毕竟,这是机器学习者和数据科学家应该…

android如何适配平板,适用于平板电脑、大屏设备和可折叠设备的自适应布局

将应用支持扩展到更大屏幕的设备(例如平板电脑、可折叠设备和 Chrome 操作系统设备)是扩大您的覆盖面和互动度的绝佳方式。平板电脑的增长率比去年同期 (YOY) 大幅增长了 30%,Chrome 操作系统设备比去年同期增长了 92%。我们还发现,用户使用平板电脑的时…

string修饰的梦修改吗_知识点!!!NSString用copy和strong修饰的区别

废话不多说直接上例子。结果在下边!!!!!用strong修饰:interface ViewController ()property(nonatomic,strong)NSString *str1;endimplementation ViewController- (void)viewDidLoad {[super viewDidLoad]…

对于机器学习,到底该选择哪种编程语言?

开发者到底应该学习哪种编程语言才能获得机器学习或数据科学这类工作呢?这是一个非常重要的问题。我们在许多论坛上都讨论过这个问题。今天,我将给出我自己的答案并解释其中原因,但我们首先看一些数据。毕竟,这是机器学习者和数据…

置顶图片代码加链接html,css图片怎么加链接?

css可以通过在图片前加标签实现为图片加链接,语法:。使用此方法引入图片即可为图片添加链接。设定图片超链接,用css样式来实现,其实就是给这个图片的块添加超链接,我们可以通过在这个块的前面添加一个a标签来实现&…

linux上修改html,linux进程名修改

如何修改 Linux 中的进程名在编写网络服务器程序时,为了响应客户端的请CSS布局HTML小编今天和大家分享,我们经常需要新建进程来处理业务流程;而且又是为了关闭某个非法请CSS布局HTML小编今天和大家分享或者关闭长连接的客户端,这时…

AI 崛起,科学家的天下,程序员的谢幕

一边,在移动互联网时代掉队的微软迅速组织起来了一个万人的 AI 团队。 另一边,Facebook、Google 在对各个技术公司进行买买买,为了在 AI 时代的探索中铺好路。 多年前「深蓝」下国际象棋时,所有人都觉得人工智能还是遥不可及的学…

lammps计算聚合物例子_LAMMPS模拟聚合物结构,非晶态聚合物变形行为的模拟,纳米线变形模拟,单轴张力模拟,晶格参数计算...

推荐一个网站,上面有LAMMPS模拟聚合物结构,非晶态聚合物变形行为的模拟,纳米线变形模拟,单轴张力模拟,晶格参数计算的lammps脚本,如下面是晶格参数计算的lammps脚本,具体网址是:LAMMPS Inputs Archives - LAMMPS Tube​lammpstube…

jenkins 手动执行_Jenkins Git client插件命令执行漏洞(CVE201910392)

0x00 漏洞描述Jenkins发布了官方安全公告:https://jenkins.io/security/advisory/2019-09-12/,Git客户端插件中的系统命令执行漏洞。Git客户端插件接受用户指定的值作为调用的参数,git ls-remote以验证指定URL处是否存在Git存储库。这是以允许具有Job/Co…

Python核心团队计划2020年停止支持Python2,NumPy宣布停止支持计划表

Python核心团队计划在2020年停止支持Python 2。NumPy项目自2010年以来一直支持Python 2和Python 3,并且发现支持Python 2对我们有限的资源增加了负担;因此,我们最终计划将停止支持Python 2。现在,我们已经进入了社区支持的Python …

怎么把html表复制到word里,怎么把网页表格复制到word

在互联网时代我们经常要在网页中找资料,文字进行复制粘贴调整格式还好,但是有时网页中的表格复制到Word中,表格的边框线全没了,怎么办呢?那么下面就由学习啦小编给大家分享下把网页表格复制到word的技巧,希望能帮助到…

设置maven 参数调休_IDEA 使用 Maven构建Spark项目

上一篇讲了普通构建spark项目 这次分享用Maven构建Spark项目,中间遇到了很多坑!其根本原因是Scala 与 Spark的版本不一致!本次环境:Java1.8Scala 2.11.8Spark spark-2.1.0-bin-hadoop2.6.tgz 新建Maven项目图1.选择顺序图2.随便写…

语音识别现状与工程师必备技能

作者 | 陈孝良 责编 | 胡永波 目前来看,语音识别的精度和速度比较取决于实际应用环境,在安静环境、标准口音、常见词汇上的语音识别率已经超过95%,完全达到了可用状态,这也是当前语音识别比较火热的原因。 随着技术的发展&#xf…

NPER用计算机怎么算,计算机财务管理第三章详解.doc

计算机财务管理第三章 EXCEL在资金时间价值计算中的应用货币的时间价值,是财务管理的基础。这一章除了对基本理论和公式进行归纳,还重点介绍了Excel中的年金计算函数,它们是全书乃至全部金融计算的通用工具。最后设计了一组有现实背景的简单示…