无痛VSCode+clangd+lldb+cmake配置C/C++开发环境

news2024/11/19 7:46:43

前言

在C/C++开发中,如果使用vscode作为开发平台的话,相信大家都会安装C/C++扩展,在remote到远程一个机器上开发时,C/C++扩展提供的自动补全等功能总是慢一拍,这让我感觉很不舒服,时间就了就人忍不下去了,clangd或许是一个更好的选择。
clangd相比与C/C++扩展有什么优势呢?

  1. 更好的错误提示和补全功能:clangd基于Clang编译器,能够提供更准确和友好的错误提示,而且具有更强大的自动补全功能,相比于C/C++扩展,能够提供更好的代码补全和语义分析[0][6]。
  2. 更好的调试体验:lldb+clangd扩展结合了LLDB调试器和clangd的能力,能够提供强大的调试功能。通过配置VSCode的调试环境,可以使用LLDB进行调试,并且能够在调试过程中查看变量值、表达式求值等[6]。
  3. 更好的语言支持:lldb+clangd扩展基于clangd,能够提供更好的C/C++语言支持。由于clangd是基于Clang编译器的,因此能够支持最新的C/C++语言特性和标准[0]。
  4. 更灵活的配置选项:通过对lldb+clangd扩展的配置,可以根据个人需求进行调整,例如调试器类型、启动程序、工作目录等[6]。
  5. 更好的社区支持:lldb+clangd扩展有一个活跃的开发和支持社区,可以及时解决问题和提供帮助[0]。


    vscode扩展lldb+clangd相比于C/C++扩展具有更好的错误提示和补全功能、更强大的调试体验、更好的语言支持、更灵活的配置选项和更好的社区支持。这些优势使得lldb+clangd成为一个强大的工具链,能够提高C/C++开发的效率和质量。

网上搜索的教程,都是扔几个配置json文件,几个文字就省略完了,看的云里雾里,所以自己又重新总结了一下,把步骤重新梳理了一下,希望能有所帮助。

环境配置

本教程使用win10remote到wsl2:Debian系统上,其他linux系统也是可以的,ubuntu20.04我之前试的时候,调试功能有点问题,不知道是不是我系统的原因,所以选择wsl时可以尽量避开这个系统。

1. 依赖安装


我们需要在我们的linux系统上安装4个依赖:clang+clangd+lldb+cmake


clang:Clang是一种用于C、C++和Objective-C编程语言的编译器前端。它被设计为一个快速、高效和高度可定制的编译器,提供出色的诊断和错误信息。Clang是LLVM项目的一部分,LLVM是一个模块化和可重用的编译器和工具链技术集合。Clang在工业界被广泛使用,以其对语言标准的遵循和对生成高质量代码的关注而闻名。


clangd:clangd是一个基于Clang编译器的语言服务器,用于提供C/C++语言的代码补全、语义分析和代码导航等功能。它可以与各种编辑器和集成开发环境(IDE)集成,例如Visual Studio Code(VSCode),提供更好的代码编辑和开发体验。clangd通过解析源代码并构建语法树和语义图来理解代码,并根据用户的输入提供相关的代码建议和信息。它还支持跳转到定义、查找引用、重构等功能,帮助开发人员更高效地编写和维护C/C++代码。


lldb:lldb是一个开源的调试器,用于调试C、C++、Objective-C和Swift等编程语言的应用程序。它是在LLVM项目的基础上开发的,提供了强大的调试功能和交互式命令行界面。lldb支持断点设置、变量查看、堆栈跟踪、表达式求值等调试操作,可以帮助开发人员定位和修复应用程序中的错误。它还支持多种平台和架构,并且可以与各种集成开发环境(IDE)和编辑器集成,提供更好的调试体验。


cmake:CMake是一个跨平台的开源构建工具,用于管理和自动化软件项目的构建过程。它使用简单的语法和配置文件来描述项目的构建规则,并生成适用于不同操作系统和编译器的构建脚本。CMake可以生成各种构建系统的配置文件,如Makefile、Ninja、Visual Studio等,使得项目可以在不同的开发环境中进行构建。CMake还提供了丰富的功能,如依赖管理、模块化构建、自定义构建选项等,使得项目的构建过程更加灵活和可扩展。它被广泛应用于各种软件项目的构建和跨平台开发。

Linux系统中,安装以上依赖:

sudo apt install clang clangd lldb cmake

有的系统可能需要yum或者homebrew来安装,具体的可以自己查一下。

2. vscode插件安装

在vscode中,我们需要安装以下四个插件

其中,安装CodeLLDB时会有个文件安装失败,我们需要手动下载下来这个文件

然后点击install from VSIX...

然后选择已经下载的vsix文件的路径,安装即可。


安装完成后,重新启动

配置lldb+clangd环境


1. Cmake快速创建工程


(1)随便打开或者创建一个空的文件夹,快捷键ctrl+shift+p,输入命令
Cmake:Quick Start


(2)选择clang编译器


(3)不选择cmakelist文件

(4)填写项目名称


(5)创建C++项目


(6)选择可执行程序

(7)这样,cmake就直接帮我们创建了一个项目,并创建了main.cpp



2. 设置clang编译目录


(1)选择左下角setting


(2)选择workspace,搜索clang,在Arguments一栏,点击Add item,并输入参数

--compile-commands-dir=${workspaceFolder}/build


(3)这时候,.vscode文件夹下面会多出一个setting.json文件,里面是我们刚才写的配置



3. 编译+运行+调试


然后我们点击main.cpp,然后点下面的Build进行编译,会得到一个可执行程序,位于build目录下,然后我们按F5运行,会报出一个错误,找不到launch.json,然后.vscode下面会自动多出一个launch.json,


我们修改launch.json,将program参数,修改为我们可执行程序的路径

这时候,再按F5就可以运行了,终端上成功的打出了hell world.

还可以添加断点进行调试,

到这里,我们就傻瓜式的搭建了一个C/C++开发环境,以后就可以舒服的写代码啦,clangd还有许多其他特性,搭建完这个开发环境,就可以慢慢探索啦。

《C++ Primer》《Effective C++》是C++开发者必不可少的书籍,如果你想入门C++,以及想要精进C++开发技术,这两本书可以说必须要有。此外,《Linux高性能服务器编程》以及《Linux多线程服务端编程:使用muduo C++网络库》.(陈硕)》是快速提高你的linux开发能力的秘籍。《大话设计模式》可以增强我们的模型提取及设计能力,写出更优雅的代码。同时,《操作系统导论》更是开发必读书目,在网上搜索相关资源也要花费一些力气,需要的同学可以关注公众号【程序员DeRozan】,回复【1207】快速免费领取~

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

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

相关文章

考公-判断推理-逻辑判断-加强类

论点 论据 削弱 论点 转折之后 例题 例题 例题 例题 搭桥方向,论据推出论点 例题 例题 例题 例题 例题 例题 例题 例题 例题 例题 例题 例题 例题 例题 例题 例题 例题 例题 例题

【Redis】Redis的持久化(备份)

【Redis】Redis的持久化(备份) Redis的数据全部在内存里,如果突然宕机,数据就会全部丢失,因此必须有一种机制来保证Redis的数据不会因为故障而丢失,这种机制就是Redis的持久化机制。 如图所示&#xff0c…

将单个训练数据集文件拆分为:image文件和label文件(pytorch学习+蚂蚁蜜蜂数据集)

蚂蚁蜜蜂分类数据集下载链接:https://download.pytorch.org/tutorial/hymenoptera_data.zip 要实现如图操作: 将ants分为ants_image和ants_label 将bees分成bees_image和bees_label 创建ants_label和bees_label,并且以图片名作为txt文件的…

layui单选必填验证

效果&#xff1a; 代码 <div class"layui-form-item"><label class"layui-form-label layui-required-title">对此次活动内容输出是否满意&#xff1f;</label><div class"layui-input-block"><input type"ra…

int(M)、char(M) 、varchar(M)的用法

文章目录 MySQL中int、char、varchar的一般用法1、int (M)2、varchar(M)3、char(M)4、char(M) 和varchar(M)的区别4.1 区别1&#xff1a;定长和变长4.2 区别2&#xff1a;存储容量上4.3 区别3&#xff1a;在展示上4.4 区别4&#xff1a;在使用场景上4.5 区别5&#xff1a;在书写…

如何编写技术文档?

软件开发中&#xff0c;为你的软件系统编写文档并不是一件新鲜的事情。几乎所有人都明白这样的道理&#xff1a; 你的软件产品如何优秀对用户来说并不是最重要的&#xff0c;因为你的文档如果不够优秀&#xff0c;用户不会使用它&#xff01;即便用户在某些情况下不得不使用你…

uniapp app 实现右上角回首页;点homeButton返回上一页;onNavigationBarButtonTap不生效问题

场景&#xff1a; app&#xff0c;Android移动端 实现点击右上角图标&#xff0c;回首页。 问题&#xff1a;用了官网的 homeButton&#xff0c;图标正常展示了&#xff0c;也可点击&#xff0c;但每次点击后是会返回上一页而非首页。 后来查到说&#xff0c;要结合onNavigatio…

SciencePub学术 | 计算机重点SCIE征稿中

SciencePub学术 刊源推荐: 计算机重点SCIE征稿中&#xff01;信息如下&#xff0c;录满为止&#xff1a; 一、期刊概况&#xff1a; 计算机语音类重点SCIE 【期刊简介】IF&#xff1a;4.0-4.5&#xff0c;JCR2区&#xff0c;中科院3区&#xff1b; 【出版社】世界排名前三出…

Mysql之explain详解

1. explain作用 使用explain可以展示出sql语句的执行计划&#xff0c;再根据sql的执行计划去判断这条sql有哪些点可以进行优化&#xff0c;从而让sql的效率达到最大化。 2. 执行计划各列含义 &#xff08;1&#xff09;id&#xff1a;id列是select的序列号&#xff0c;这个…

Docker基础入门:从0开始学习容器化技术

Docker基础入门&#xff1a;从零开始学习容器化技术 一、Docker基础1.1、Docker起源1.2、Docker概念1.3、Docker优势1.4、Docker 的组成 二、Docker安装2.1、卸载旧版Docker2.2、需要的安装包依赖2.3、设置镜像仓库2.4、更新yum软件包索引2.5、安装Docker--社区版2.6、配置镜像…

十、接口(2)

本章概要 抽象类和接口完全解耦多接口结合使用继承扩展接口 结合接口时的命名冲突 抽象类和接口 尤其是在 Java 8 引入 default 方法之后&#xff0c;选择用抽象类还是用接口变得更加令人困惑。下表做了明确的区分&#xff1a; 特性接口抽象类组合新类可以组合多个接口只能…

Java基础知识实际应用(学生信息管理系统、猜拳小游戏、打印日历)

一、Java学生信息管理系统 这个系统包含了添加、修改、删除、查询和显示所有学生信息等功能。您可以在此基础上进行修改和完善&#xff0c;以适应您的需求。 import java.util.Scanner;public class StudentManagementSystem {private static Scanner scanner new Scanner(S…

C++——oo的魅力之多态

文章目录 多态的概念多态的定义和实现多态的构成条件虚函数重写的两个例外协变(基类和派生类虚函数返回值类型不同)析构函数的重写(基类和派生类析构函数名字不同) c11 override 和 final关键字 重载&#xff0c;重写(覆盖)&#xff0c; 隐藏(重定义)对比抽象类(纯虚函数)多态的…

Vivado使用入门之二:网表物理约束

目录 一、背景 二、物理约束 2.1 概念 2.2 网表约束 2.2.1 CLOCK_DEDICATED_ROUTE 2.2.2 MARK_DEBUG 2.2.3 DONT_TOUCH 2.2.4 LOCK_PINS 三、位置约束 四、布线约束 4.1 route 4.2 assign routing mode 五、参考 一、背景 在工程设计中为了保证上板后功能正常&…

【BI看板】Docker-compose安装Superset,安装最新版本2.1.0

软件及环境准备 docker&#xff0c; docker-compose docker-compose安装 字节码安装 #wget https://github.com/docker/compose/releases/download/v2.5.0/docker-compose-linux-x86_64 #mv docker-compose-linux-x86_64 docker-compose #chmod x /usr/local/bin/docker-com…

一、计算机网络体系结构

Content 1. 计算机网络的组成2. 计算机网络的功能3. 计算机网络的分类4. 计算机网络的性能指标5. 计算机网络分层结构OSI模型TCP/IP模型互联网五层模型共同点&#xff1a; 6. 计算机网络提供的服务按三种方式分类面向连接服务和无连接服务可靠服务和不可靠服务有连接服务和无连…

5G+AI数字化智能工厂建设解决方案PPT

导读&#xff1a;原文《5GAI数字化智能工厂建设解决方案》&#xff08;获取来源见文尾&#xff09;&#xff0c;本文精选其中精华及架构部分&#xff0c;逻辑清晰、内容完整&#xff0c;为快速形成售前方案提供参考。数字化智能工厂定义 智能基础架构协同框架 - 端、边、云、网…

Java课题笔记~ SpringMVC拦截器

SpringMVC 中的 Interceptor 拦截器&#xff0c;它的主要作用是拦截指定的用户请求&#xff0c;并进行相应的预处理与后处理。其拦截的时间点在“处理器映射器根据用户提交的请求映射出了所要执行的处理器类&#xff0c;并且也找到了要执行该处理器类的处理器适配器&#xff0c…

2023华为产品测评官-开发者之声 + 华为云ModelArts试用体验心得

2023华为产品测评官&#xff0d;开发者之声 华为云ModelArts试用体验心得 文章目录 2023华为产品测评官&#xff0d;开发者之声 华为云ModelArts试用体验心得一、活动介绍二、华为云ModelArts简介三、AI Gallery简介步骤1&#xff1a;订阅模型步骤2&#xff1a;使用订阅模型部…

Reids 的整合使用

大家好 , 我是苏麟 , 今天带来强大的Redis . REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统&#xff0c;是跨平台的非关系型数据库。 Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选…