vscode c++环境配置

news/2024/5/12 2:58:32

1.基础软件安装

  1. 安装Visual Studio Code.

  2. 安装C++拓展。点击在vscode界面最左侧的Extensions图标(打开快捷键:ctrl+shift+X),搜索“C/C++”,点击进行安装。
    在这里插入图片描述

  3. 确保已安装gcc. 一般ubuntu系统会预装gcc.在终端窗口中输入如下命令以检验是否已安装gcc。

gcc -v  

如果能够正确打印出当前gcc的版本信息,则表示已经预装。若没有预装,则用如下命令安装安装 GNU 编译器工具和 GDB 调试器:

sudo apt update # 更新软件包源 
sudo apt-get install build-essential gdb

后续vscode找不到命令 g++配置等内容,需要使用上述命令安装gdb

2. 环境配置

通过终端创建一个名为project的文件夹以保存我们的VSCode项目,项目的配置文件位于.vscode文件夹下。在后续教程中,将具体说明在vscode中如何操作生成.vscode 文件夹下的三个配置文件:

tasks.json (compiler build settings) ,负责编译
launch.json (debugger settings),负责调试
c_cpp_properties.json (compiler path and IntelliSense settings),负责更改路径等设置

2.1. 源代码 helloworld.cpp

新建文件helloworld.cpp
在helloworld.cpp粘贴如下代码并保存(Ctrl+S),在vscode左侧栏的Explorer视图中可以看到新建的文件helloworld.cpp。

#include <iostream>
#include <vector>
#include <string>using namespace std;int main()
{vector<string> msg {"Hello", "C++", "World", "from", "VS Code", "and the C++ extension!"};for (const string& word : msg){cout << word << " ";}cout << endl;
}

2.2. 编译 Build helloworld.cpp

创建 tasks.json

在.vscode下创建tasks.json文件,它的作用是告诉 VS Code 如何构建(编译)程序,将调用 g++编译器从源代码创建一个可执行文件。 在上方的主菜单中,选择 终端>运行任务 (Terminal>Configure Default Build Task) ,将出现一个下拉菜单,显示 C++ 编译器的各种预定义编译任务。选择如下。

在这里插入图片描述

上述操作将自动在.vscode文件夹下生成tasks.json文件。当然也可以在Explorer视图中新建文件,将下面代码复制进去,手动生成tasks.json,教程后面的配置文件也均可这样生成。其中代码类似如下:

{"tasks": [{"type": "cppbuild","label": "C/C++: g++ 生成活动文件","command": "/usr/bin/g++","args": ["-fdiagnostics-color=always","-g","${file}","-o","${fileDirname}/${fileBasenameNoExtension}"],"options": {"cwd": "${fileDirname}"},"problemMatcher": ["$gcc"],"group": {"kind": "build","isDefault": true},"detail": "调试器生成的任务。"}],"version": "2.0.0"
}

注: VScode支持使用 ${variableName} 语法在配置文件中实现键值字符串的变量替换。tasks.json及后面为调试创建的launch.json文件中变量的具体说明可参考variable reference.

tasks.json中部分关键字说明:

command: 要运行的程序,此处是g++。

args: args 数组包含将传递给 g++ 的命令行参数(必须按照编译器预期的顺序指定)。“ f i l e " 表示当前打开的待编译的活动文件,对它进行编译,并在当前路径 {file}"表示当前打开的待编译的活动文件,对它进行编译,并在当前路径 file"表示当前打开的待编译的活动文件,对它进行编译,并在当前路径{fileDirname}生成与活动文件同名无后缀的可执行文件” f i l e D i r n a m e / {fileDirname}/ fileDirname/{fileBasenameNoExtension}"。在本案例中活动文件指helloworld.cpp,所生成的可执行文件为helloworld。

label: 标签值是将在任务列表中看到的内容;可以随意命名它。

group中的isDefault: 值为true表示支持通过快捷键ctrl+shift+B来执行该编译任务。如果值改为false,也可以从菜单中选择运行: 终端>运行生成任务Terminal>Run Build Task。

执行编译

  1. 回到活动文件helloworld.cpp
  2. 执行tasks.json中定义的编译任务。快捷键ctrl+shift+B或者从菜单中选择运行:终端>运行生成任务(Terminal>Run Build Task)。
  3. 任务开始时,源代码编辑器下方将出现集成终端面板。任务执行完成后,终端会显示编译结果,对于成功的 g++编译,输出类似如下:

在这里插入图片描述

  1. 如下图,点击+按钮将创建一个以当前工作目录(本案例中是helloworld)默认运行的shell终端。输入指令ls查看当前目录下所有文件,可以看到编译生成的可执行文件helloword。

5.终端中输入 ./helloworld ,即可运行可执行文件helloworld

在这里插入图片描述

修改tasks.json

可以修改 tasks.json来满足一些特定需求。比如 将" f i l e " 替换“ {file}"替换“ file"替换{workspaceFolder}/*.cpp”来构建多个 C++ 文件; 将“ f i l e D i r n a m e / {fileDirname}/ fileDirname/{fileBasenameNoExtension}”替换为硬编码文件名(如“helloworld.out”)来修改输出文件名。

2.3 调试Debug helloworld.cpp

创建launch.json

launch.json 文件用于在 Visual Studio Code 中配置调试器。接下来将创建launch.json 文件。

从主菜单中,选择 运行 > 添加配置…Run > Add Configuration…),选择C++ (GDB/LLDB)。 之后将看到展示各种预定义调试配置的下拉列表,选择如下。将自动生成launch.json文件。

在这里插入图片描述

在编辑器中打开launch.json,具体内容类似如下:

{// 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387"version": "0.2.0","configurations": [{"name": "(gdb) 启动","type": "cppdbg","request": "launch","program": "${fileDirname}/${fileBasenameNoExtension}","args": [],"stopAtEntry": false,"cwd": "${fileDirname}","environment": [],"externalConsole": false,"MIMode": "gdb","setupCommands": [{"description": "为 gdb 启用整齐打印","text": "-enable-pretty-printing","ignoreFailures": true},{"description": "将反汇编风格设置为 Intel","text": "-gdb-set disassembly-flavor intel","ignoreFailures": true}]}]
}

launch.json中部分关键字说明:

program: 指带调试的程序,其值对应程序的路径。在这里设置为" f i l e D i r n a m e / {fileDirname}/ fileDirname/{fileBasenameNoExtension}",在本案例中对应“helloworld/helloworld”.

stopAtEntry: 默认情况下,C++拓展不会向源代码添加任何断点,stopAtEntry 值设置为 false。 将stopAtEntry值更改为 true 将使调试器在开始调试时停止在 main 方法上。

3、C/C++ 配置

如果你想更多地控制 C/C++ 扩展,你可以创建一个 c_cpp_properties.json 文件,它允许你更改设置,例如编译器的路径、包含路径、C++ 标准(默认为 C++17),等等。 您可以通过从命令面板 (Ctrl+Shift+P) 运行命令 C/C++: Edit Configurations (UI) 来查看 C/C++ 配置 UI。

如果您的程序包含不在您的工作区或标准库路径中的头文件,您只需要修改包含路径Include path 设置。Visual Studio Code 将这些设置放在.vscode/c_cpp_properties.json 中。如果您直接打开该文件,它应该如下所示:

{"configurations": [{"name": "Linux","includePath": ["${workspaceFolder}/**"],"defines": [],"compilerPath": "/usr/bin/gcc","cStandard": "c11","cppStandard": "c++17","intelliSenseMode": "clang-x64"}],"version": 4
}

【工程环境】利用VSCode + CMakeList完成C/C++项目工程搭建_vscode创建c++项目-CSDN博客

详解Linux下使用vscode编译运行和调试C/C++ - 知乎 (zhihu.com)


http://www.mrgr.cn/p/32577721

相关文章

P5470 [NOI2019]序列 题解

P5470:NOI2019 序列题意:给定两个长度 \(n\) 的序列 \(a,b\)。 要求各选出 \(k\) 个数,使得这 \(2k\) 个数之和最大,且两个序列选出的数至少有 \(l\) 个位置相同。 \(n\le 2\times 10^5\)。command_block 的题解 但是这个貌似有一些小问题,后文有写。 算法:模拟费用流。 …

docker-运行tomcat服务

环境说明 linux系统版本:lsb_release -adocker 版本: docker -v 不同的操作系统以及软件版本,可能会遇到不一样的问题,一定要注意版本问题。.1.tomcat镜像版本选择。 进入docker官网搜索 8-jdk8自己选择的版本如下docker pull tomcat:8-jdk8可以正确拉取。 .2.启动tomcat 服…

camera基础知识二

Camera sensor block: 以0V13b10为例:ADC:转换成数字信号 ISP:一般sensor内部的isp处理很有限,会选择外部的isp image interface:MIPITX,转换成mipi载波信号发出去 PLL:外部晶振或者平台端提供时钟,sensor内部做分屏 timing Logical:reset、fsync等 control register…

统一结果封装

Result{code;data;msg}1、Result一般来说,增删改返回boolean,查询返回对象或集合,还有其他类型的返回数据,前段解析数据比较麻烦,需要返回一个统一的数据结果统一数据返回结果类:data:封装数据(各种类型的,例如boolean、null、json等) code:封装操作类型与是否成功,可…

git 上传文件夹至远端仓库的方法

上传的远端git可以是gitlab、github、gitee、gitblit或者gitCode等等 以下以GitHub为例说明&#xff1a; 1、登录GitHub网站&#xff08;账户/密码&#xff09; 2、创建一个新的空白项目&#xff08;或者已有的项目&#xff09;hello-world 分支是master &#xff0c;这里默认即…

小目标检测篇 | YOLOv8改进之GSConv + Slim Neck提升小目标检测效果

前言:Hello大家好,我是小哥谈。在文章中,作者提出了一种新方法GSConv来减轻模型的复杂度并保持准确性。GSConv可以更好地平衡模型的准确性和速度。并且,提供了一种设计范式Slim Neck,以实现检测器更高的计算成本效益。实验过程中,与原始网络相比,改进方法获得了最优秀的…

LCD - 液晶显示原理(一)

1. 显示器介绍 ​ 显示器属于计算机的I/O设备,即输入输出设备。它是一种将特定电子信息输出到屏幕上再反射到人眼的显示工具。常见的有CRT显示器、液晶显示器、 LED点阵显示器及OLED显示器。液晶显示器,简称LCD(Liquid Crystal Display),相对于上一代CRT显示器(阴极射线管显…

分布式ID生成方案总结

分布式场景下&#xff0c;需要保证每一个服务拿到的id是唯一的。本文讨论、分析、总结了一些常见的分布式ID生成方案 结论&#xff1a;技术上没有银弹&#xff0c;每种分布式id都有自己的使用场景。uuid适用于业务比较简单&#xff0c;对性能没有太高追求等。 目前主流是 基于数…

HCIP—BGP路由发布

R1和R2&#xff0c;R4和R5建立EBGP对等体 R1和R2&#xff08;R4和R5&#xff09;之间属于EBGP对等体&#xff0c;可以使用直连物理接口建立对等体关系&#xff0c;TTL值默认1。由于使用直连物理接口方式建立&#xff0c;刚好一跳到达。 [R1]bgp 100 [R1-bgp]router-i…

RestFul风格的开发

Representational State Transfer;get查询,post新增,put更新,delete删除1、REST风格根据REST风格对资源进行访问称为restful 描述模块通常使用复数表示某类资源每个控制器方法前都有这两个注解:@RequestMapping(value = "/users/{id}/{name}",method = RequestM…

苹果App Store上架工具介绍

文章目录 摘要引言正文1. Xcode2. [appuploder](https://www.applicationloader.net/)3. [克魔助手](https://keymob.com/) 4.[ipa guard](https://www.ipaguard.com/)总结参考资料 摘要 苹果App Store作为iOS应用程序的主要分发渠道&#xff0c;上架应用程序需要遵守规定和通…

【MySQL系列】--基础知识1:事务与隔离

1、MySQL:基础知识之事务与隔离

以智慧公厕建设助推城市的高质量发展

近年来&#xff0c;随着城市化进程的加快&#xff0c;城市基础设施建设日益完善&#xff0c;其中智慧公厕的建设成为了城市高质量发展的重要组成部分。智慧公厕以其智能化管理、数字化使用和信息化运行的特点&#xff0c;将公共厕所的管理水平提升到了一个全新的高度&#xff0…

Fiddler(5)Statistics数据统计面板性能分析,Inspectors查看请求与响应

Statistics数据统计面板,性能分析 重点:主要关注RTT,体现一个请求从发送到返回响应的时间反映一个请求的性能指标,其中主要需要关注RTT 会展示全世界范围的请求平均数据 show chart按钮,从饼状图中分别出哪些资源的请求耗时最多,从而对页面的访问进行访问速度优化Inspect…

Camera基础知识

camera模组组成:保护膜:适用于对与镜头的保护,防止镜头出现灰尘或者污渍,以及防止镜头镜片出现划痕。 镜头:主要作用是聚集光线,并将光线折射到传感器上 马达(VCM):通过移动镜头来实现光学变焦 IR滤光片:人眼感测器只能检测到波长介于400nm至700nm之间的可见光,IR滤…

畅捷通T+ Ufida.T.DI.UIP.RRA.RRATableController 远程命令执行漏洞

一、漏洞信息 漏洞名称&#xff1a;畅捷通T Ufida.T.DI.UIP.RRA.RRATableController 远程命令执行漏洞 漏洞类别&#xff1a;远程命令执行漏洞 风险等级&#xff1a;高危 二、漏洞描述 畅捷通TPlus适用于异地多组织、多机构对企业财务汇总的管理需求&#xff1b;全面支持企…

Autosar-CanNm、Nm配置详解(免费)-1

3.1由DBC创建Nm、CanNM ETAS工具可根据DBC文件&#xff0c;自动配置生成Nm、CanNm模块。但是关键的一点是要生成NM、CanNM模块DBC文件中必须有NM类型的报文。 还有一点&#xff0c;即使DBC文件中有Nm的报文&#xff0c;但是因为报文的类型在导入时没有设置成Nm&#xff0c;那也…

数据分析能力模型分析与展示

具体内容&#xff1a; 专业素质 专业素质-01 数据处理 能力定义•能通过各种数据处理工具及数据处理方法&#xff0c;对内外部海量数据进行清洗和运用&#xff0c;提供统一数据标准&#xff0c;为业务分析做好数据支持工作。 L1•掌握一…

HTML 简介

​HTML(HyperText Markup Language,中文:超文本标记语言)是一种用于创建网页结构和内容的标记语言。它由一系列标签组成,这些标签描述了网页中的各个元素和其它相关信息。通过使用HTML标签和属性,开发人员可以定义文本、图像、链接、表格、表单等元素,并控制它们的外观和…