vscode c++环境配置

news/2024/5/9 8:18:16/文章来源:https://blog.csdn.net/m0_37634594/article/details/137089452

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.luyixian.cn/news_show_1026227.aspx

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

相关文章

数据处理库Pandas的数据结构Series

Series是一种一维数据结构&#xff0c;每个元素都带有一个索引&#xff0c;与一维数组的含义相似&#xff0c;其中索引可以为数字或字符串&#xff0c;如图3-1所示。 Series 对象包含两个主要的属性&#xff1a;index 和 values&#xff0c;分别为上例中的左右两列。因为传给构…

GEE:将分类特征和标签提取到样本点,并以(csv/shp格式)下载到本地

作者:CSDN @ _养乐多_ 本文将介绍在Google Earth Engine(GEE)平台上,下载用于机器学习分类或者回归的样本点数据,样本点数据携带了分类特征和标签信息,可以以csv格式或者SHP格式。 结果如下图所示, 文章目录 一、核心函数1.1 采样1.2 下载函数二、代码链接三、完整代码…

大数据Spark--入门

文章目录 Spark 概述Spark 是什么Spark and HadoopSpark and HadoopSpark 核心模块 Spark 简单上手创建Maven项目增加 Scala 插件增加依赖关系WordCount异常处理 Spark 概述 Spark 所需资料 链接&#xff1a;https://pan.baidu.com/s/12iaW68vriL6i-xI1kmr0_g?pwdm4zc 提取码…

C语言指针详解(上)

一.什么是指针 指针是一种类型&#xff0c;用来存储变量的地址的类型 有哪些类型呢 字符指针&#xff1a;char* 整型指针&#xff1a;int* 浮点型指针&#xff1a;float* 双精度浮点型指针&#xff1a;double* 空指针&#xff1a;void* &#xff08;每一个类型的指针&a…

Python学习之-正则表达式

目录 前言&#xff1a;1.re.serach1.1例子&#xff1a; 2.re.match2.1示例1&#xff1a;2.2 示例2&#xff1a; 3.re.findall3.1 示例 4.re.fullmatch4.1 示例1&#xff1a;4.2 示例2: 5.re.split5.1 示例1:5.2 示例2&#xff1a;5.3 示例3&#xff1a; 6.re.sub6.1 示例&#…

langchin-chatchat部分开发笔记(持续更新)

大模型相关目录 大模型&#xff0c;包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容 从0起步&#xff0c;扬帆起航。 大模型应用向开发路径及一点个人思考大模型应用开发实用开源项目汇总大模型问答项目…

Python图像处理——计算机视觉中常用的图像预处理

概述 在计算机视觉项目中&#xff0c;使用样本时经常会遇到图像样本不统一的问题&#xff0c;比如图像质量&#xff0c;并非所有的图像都具有相同的质量水平。在开始训练模型或运行算法之前&#xff0c;通常需要对图像进行预处理&#xff0c;以确保获得最佳的结果。图像预处理…

巨控GRM560工业物联网的升级后的功能

巨控GRM560&#xff1a;工业自动化领域的革命者 标签:#工业自动化 #PLC #远程控制 #OPCUA #MQTT 随着工业4.0时代的到来&#xff0c;智能制造已经成为了发展的大势所趋。在这样的背景下&#xff0c;自动化控制系统的核心——可编程逻辑控制器&#xff08;PLC&#xff09;的作用…

pytorch如何向tensor结尾添加元素或维度--torch.cat()、torch.unsqueeze()的用法

目录 示例1 矢量后增加元素 示例2 tensor维度增加1 示例3 另一种替代unsqueeze的方法 示例1 矢量后增加元素 使用torch.cat()函数 ptorch.Tensor([1,5,0]) ptorch.cat((p, torch.Tensor([4])), 0) 结果&#xff1a; 这里&#xff0c;cat的第一个输入变量用()包绕&#xf…

Vue.js高效前端开发(增删查)

效果图 代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title></head><body><div id"app"><span>ID</span><input type"text" name"…

javaSwing五子棋游戏

一、导言 五子棋&#xff0c;是一种源自中国古代的棋类游戏&#xff0c;也是一种非常古老和经典的对弈游戏。它简单易懂&#xff0c;规则清晰&#xff0c;深受广大玩家喜爱。本文将介绍如何利用Java Swing这个强大的GUI工具包&#xff0c;来实现一个简单的五子棋游戏。通过这个…

mysql基础2多表查询

多表查询 多表关系: 一对多 案例: 部门 与 员工的关系 关系: 一个部门对应多个员工&#xff0c;一个员工对应一个部门 实现: 在多的一方建立外键&#xff0c;指向一的一方的主键 多对多 案例: 学生 与 课程的关系 关系: 一个学生可以选修多门课程&#xff0c;一门课程也可以…

《论文阅读》PAGE:一个用于会话情绪原因蕴含基于位置感知的图模型 ICASSP 2023

《论文阅读》PAGE&#xff1a;一个用于会话情绪原因蕴含基于位置感知的图模型 ICASSP 2023 前言 简介任务定义模型构架Utterances Encoding with EmotionPosition-aware GraphCausal Classifier实验结果 前言 亲身阅读感受分享&#xff0c;细节画图解释&#xff0c;再也不用担…

鸿蒙开发之ArkUI组件常用组件图片和文本

ArkUI即方舟开发框架是HarmonyOS应用的UI开发提供了完整的基础设施&#xff0c;包括简洁的UI语法、丰富的UI功能&#xff08;组件、布局、动画以及交互事件&#xff09;&#xff0c;以及实时界面预览工具等&#xff0c;可以支持开发者进行可视化界面开发。 开发文档地址 &…

国产数据库中统计信息自动更新机制

数据库中统计信息描述的数据库中表和索引的大小数以及数据分布状况&#xff0c;统计信息的准确性对优化器选择执行计划时具有重要的参考意义。本文简要整理了下传统数据库和国产数据库中统计信息的自动更新机制&#xff0c;以加深了解。 1、数据库统计信息介绍 优化器是数据库…

20240319-图论

图论练习题目 拓扑排序深度优先搜索方法广度优先搜索方法 无向无权图无向有权图有向无权图 利用广度优先搜索算法有向有权图 带排序的广度优先算法/dijkstra最小生成树prims算法Kruskals Algorithm 最小割 min-cut二分图 Bipartite Graph 队列例题1 所有可能的路径例题2 岛屿数…

思腾合力受邀出席文化和旅游虚拟现实应用推广交流活动并作主题演讲

3月21日&#xff0c;由文化和旅游部产业发展司主办&#xff0c;中国信息通信研究院、北京市石景山区文化和旅游局、中国动漫集团有限公司承办的“数字赋能文旅场景建设行动——文化和旅游虚拟现实应用推广交流活动”在北京首钢一高炉SoReal科幻乐园成功举办。 思腾合力CMO徐莉受…

unity学习(71)——编译游戏发生错误3——回调问题——必须使用mapHandker的update

move这种一直发送的&#xff0c;第一次写&#xff0c;之前的数据包收发都是一次性的来完成单次任务&#xff01; 1.服务器最后一次出问题时的调试状态如下&#xff1a; 2.定位代码如下 可见确实LogicHandler了&#xff0c;也确实直行到119行的位置了 3.修改catch&#xff0c…

GPT提示词分享 —— 写作标题生成器

我想让你充当书面作品的标题生成器。我将向你提供一篇文章的主题和关键词&#xff0c;你将生成五个吸引人的标题。请保持标题简洁&#xff0c;不超过 20 个字&#xff0c;并确保保持其含义。答复时要利用题目的语言类型。我的第一个题目是 [文章内容] 3.5的回答&#x1f447;fr…

C++第十三弹---内存管理(下)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】 目录 1、operator new与operator delete函数 1.1、operator new与operator delete函数 2、new和delete的实现原理 2.1、内置类型 2.2、自定义类型 …