Windows下VSCode配置C++环境(vscode配置c++11)
ztj100 2024-11-11 15:16 22 浏览 0 评论
介绍
本文介绍了如何在 Windows 10 下使用 VSCode 配置 C/C++ 环境,编译器采用 MinGW-w64(GCC 在Windows 下的支持)
主要参考了微软 VSCode 官方文档配置 Mingw-w64文档:Mingw-w64 on Windows,含有大量的翻译内容
配置编译器
MinGW-w64 http://mingw-w64.org/doku.php
Mingw-w64 是原始 mingw.org 项目的改进,旨在支持 Windows 系统上的 GCC 编译器。它在
2007 年进行了分叉,以提供对 64 位和新 API 的支持。从那以后,它得到了广泛的使用和分配。
注意 MinGW-w64 与 MinGW 是有区别的,不要选错
1. 下载
托管在此网站:https://sourceforge.net/projects/mingw-w64/files/
可以直接选择在线安装器:MinGW-W64 Online Installer
MinGW-W64-install.exe
也可以选择相应版本安装,这里我选择的是 x86_64-posix-seh
2. 安装
方法1. 使用安装包
选项说明:
名称 | 解 释 | 可选项 | 说明 | 选择建 议 |
Version | 制 定 版 本 号 | 根据需 求,无 需求则 最大 | ||
Architecture | 架 构 | x86_64,i686 | 64 位系统选择 x86_64,32 位系统 选择 i686 | x86_64 |
Threads | 线 程 模 型 | posix,win32 | posix,跨平台好。win32 性能好 | posix |
Exception | 异 常 处 理 系 统 | x86_64: sjlj,seh。 i686:sjlj, dwarf。 | sjlj 同时支持 32 位和 64 位,稳定 性好。seh 和 dwarf 只分别支持 64 位、32位,但性能好 | seh |
Build revision | 构 建 版 本 号 |
参考:https://wiki.qt.io/MinGW-64-bit
方法2. 压缩包(推荐)
下载相应的安装包,具体版本选择参考上表,选择合适位置解压至路径中没有空格的文件夹(换句话说,不能是 C:/Program Files/ 下的默认位置,可以是 C:\mingw-w64 )
3. 添加环境变量
将 mingw64 下的 bin 文件夹添加至 path
4. 检查
执行命令
g++ --version
gdb --version
配置 IDE
VSCode
1. 安装 MinGW-w64
2. 安装 C/C++ 插件
3. 配置
这里我们需要在 .vscode 文件夹下共创建如下3个文件:
- tasks.json (生成任务。告诉 VSCode 如何生成(编译)程序,该任务将调用 g++ 编译器
以基于源代码创建可执行文件)
- launch.json (调试器设置)
- c_cpp_properties.json (编译器路径和 IntelliSense 设置)
具体操作说明:
1. 创建 C++ 示例代码文件 Hello World,并保存,确保存在于文件夹中,而非临时文件
示例代码:
2. 配置 tasks.json ,用于编译
#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;
}
1. 配置 tasks.json
菜单 > 终端 > 配置默认生成任务
下拉列表中,列出了 C++ 编译器的各种预定义构建任务。选择 C/C++: g++.exe build
active file。若是 C,请选择 C/C++: gcc.exe build active file,C 无法使用 g++.exe
Note: 是 C 还是 C++ 是根据文件后缀名来判断的,而非根据右下角选择的语言
完成后会在 .vscode 文件夹下创建 task.json 文件并打开
部分变量说明:
- command 设置指定要运行的程序;在这种情况下是g ++。
- args 数组指定将传递给 g++的 命令行参数。必须按照编译器期望的顺序指定这
些参数。此任务告诉 g++ 获取活动文件( ${file} ),对其进行编译,并在当前
目录( ${fileDirname} )中创建一个与活动文件同名但以 .exe 为扩展名
( ${fileBasenameNoExtension}.exe )的可执行文件,如 helloworld.exe。
可使用 "${workspaceFolder}\\*.cpp" 来替换 ${file} ,这将生成当前文件夹
中的所有 .cpp 文件
- label 是在任务列表中显示的值,可以随意命名
- group 中 "isDefault": true 指定当按 Ctrl + Shift + B 时将运行此任务。此属
性仅出于方便起见;如果设置为 false,仍然可以使用“ 任务:运行构建任务”从“终
端”菜单中运行
- group 中的 "isDefault": true ,指定当按下 Ctrl + Shift + B 时将运行此任
务。此属性仅出于方便起见;如果将其设置为 false,仍可以使用“ 运行生成任务”
从“终端”菜单中运行
附 task.json变量参考 https://code.visualstudio.com/docs/editor/variables-reference
2. 运行生成任务,编译
回到 helloworld.cpp ,按 Ctrl + Shift + B 或从“ 终端”菜单中选择“ 运行生成任务”
成功如图所示
且当前文件夹下会多出一个 helloworld.exe 文件,可以使用”+“按钮新建一个终端,
用来执行它,输入 .\helloworld.exe
3. 配置 launch.json ,用于调试
1. 配置 launch.json
按 F5 或 菜单 > 调试 > 添加配置 > 选择“ C ++(GDB / LLDB)”
将看到各种预定义调试配置的下拉列表,选择 g++.exe build and debug active file
VSCode 将会创建 launch.json 文件并打开
部分变量说明:
- program 设置指定要调试的程序
- 默认情况下,C++ 扩展不会在您的源代码中添加任何断点,并且 stopAtEntry 值设置
为 false 。将 stopAtEntry 值更改为 true 会导致调试器开始调试时在 main 方法
上停止
记得保存修改
2. 调试
回到 helloworld.cpp ,按F5或从主菜单中选择“ 调试”>“开始调试”
- Step over (单步跳过)
前进到该程序中的下一条语句(跳过为初始化循环而执行的所有内部代码)
- Step Into (单步调试)
逐步浏览 C++ 标准库中的源代码,若要返回自己的代码,可以按 Step over (单
步跳过)或者直接切换选项卡
具体调试过程省略,有兴趣的朋友可以在底部的参考链接参考官方文档中的调试
设置 WATCH :
可以用来跟踪变量的值
将断点设置为如图所示位置,并在 WATCH 窗口中点击“+”,在文本框中输入“word”,这
是循环中的变量名,当逐步执行循环时,可发现 WATCH 窗口中的“word”的值在变化
可在调试时,将鼠标悬浮于变量中,快速查看任何变量的值
4. 配置 c_cpp_properties.json ,进一步配置 C/C++ 扩展。非必要步骤
1. 按快捷键 Ctrl+Shift+P 打开命令面板,输入 C/C++,选择“Edit Configurations(UI)”
将生成配置文件 c_cpp_properties.json 并打开
2. 配置以下两个选项
- 编译器路径 compilerPath
应该会自动填充,我这里是
D:\\Develop\\compilers\\mingw64\\bin\\gcc.exe
compilerPath 搜索顺序是:
- 首先检查 Microsoft Visual C ++ 编译器
- 然后在 Windows Subsystem for Linux(WSL)上寻找 g++
- 然后是用于 Mingw-w64 的 g++
因此,如果安装了 Visual Studio 或 WSL,则可能需要更改 compilerPath
- IntelliSense 模式
选择 gcc-x64
配置文件参考
task.json
{
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "g++.exe build active file",
"command": "C:\\mingw-w64\\i686-8.1.0-posix-dwarf-rt_v6-
rev0\\mingw32\\bin\\g++.exe",
"args": ["-g", "${file}", "-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"],
"options": {
"cwd": "C:\\mingw-w64\\i686-8.1.0-posix-dwarf-rt_v6-rev0\\mingw32\\bin"
},
"problemMatcher": ["$gcc"],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "g++.exe build and debug active file",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "C:\\mingw-w64\\i686-8.1.0-posix-dwarf-rt_v6-rev0\\mingw32\\bin\\gdb.exe",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "g++.exe build active file"
}
]
}
c_cpp_properties.json
{
"configurations": [
{
"name": "Win32",
"includePath": ["${workspaceFolder}/**"],
"defines": ["_DEBUG", "UNICODE", "_UNICODE"],
"compilerPath": "C:\\mingw-w64\\i686-8.1.0-posix-dwarf-rt_v6-rev0\\mingw32\\bin\\gcc.exe",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "clang-x86"
}
],
"version": 4
}
均位于 .vscode 文件夹下
不想看此文的小白的可以直接创建 .vscode 文件夹,在文件夹下创建这3个文件哦!
参考
VSCode 官方文档:https://code.visualstudio.com/docs/cpp/config-mingw
相关推荐
- sharding-jdbc实现`分库分表`与`读写分离`
-
一、前言本文将基于以下环境整合...
- 三分钟了解mysql中主键、外键、非空、唯一、默认约束是什么
-
在数据库中,数据表是数据库中最重要、最基本的操作对象,是数据存储的基本单位。数据表被定义为列的集合,数据在表中是按照行和列的格式来存储的。每一行代表一条唯一的记录,每一列代表记录中的一个域。...
- MySQL8行级锁_mysql如何加行级锁
-
MySQL8行级锁版本:8.0.34基本概念...
- mysql使用小技巧_mysql使用入门
-
1、MySQL中有许多很实用的函数,好好利用它们可以省去很多时间:group_concat()将取到的值用逗号连接,可以这么用:selectgroup_concat(distinctid)fr...
- MySQL/MariaDB中如何支持全部的Unicode?
-
永远不要在MySQL中使用utf8,并且始终使用utf8mb4。utf8mb4介绍MySQL/MariaDB中,utf8字符集并不是对Unicode的真正实现,即不是真正的UTF-8编码,因...
- 聊聊 MySQL Server 可执行注释,你懂了吗?
-
前言MySQLServer当前支持如下3种注释风格:...
- MySQL系列-源码编译安装(v5.7.34)
-
一、系统环境要求...
- MySQL的锁就锁住我啦!与腾讯大佬的技术交谈,是我小看它了
-
对酒当歌,人生几何!朝朝暮暮,唯有己脱。苦苦寻觅找工作之间,殊不知今日之事乃我心之痛,难道是我不配拥有工作嘛。自面试后他所谓的等待都过去一段时日,可惜在下京东上的小金库都要见低啦。每每想到不由心中一...
- MySQL字符问题_mysql中字符串的位置
-
中文写入乱码问题:我输入的中文编码是urf8的,建的库是urf8的,但是插入mysql总是乱码,一堆"???????????????????????"我用的是ibatis,终于找到原因了,我是这么解决...
- 深圳尚学堂:mysql基本sql语句大全(三)
-
数据开发-经典1.按姓氏笔画排序:Select*FromTableNameOrderByCustomerNameCollateChinese_PRC_Stroke_ci_as//从少...
- MySQL进行行级锁的?一会next-key锁,一会间隙锁,一会记录锁?
-
大家好,是不是很多人都对MySQL加行级锁的规则搞的迷迷糊糊,一会是next-key锁,一会是间隙锁,一会又是记录锁。坦白说,确实还挺复杂的,但是好在我找点了点规律,也知道如何如何用命令分析加...
- 一文讲清怎么利用Python Django实现Excel数据表的导入导出功能
-
摘要:Python作为一门简单易学且功能强大的编程语言,广受程序员、数据分析师和AI工程师的青睐。本文系统讲解了如何使用Python的Django框架结合openpyxl库实现Excel...
- 用DataX实现两个MySQL实例间的数据同步
-
DataXDataX使用Java实现。如果可以实现数据库实例之间准实时的...
- MySQL数据库知识_mysql数据库基础知识
-
MySQL是一种关系型数据库管理系统;那废话不多说,直接上自己以前学习整理文档:查看数据库命令:(1).查看存储过程状态:showprocedurestatus;(2).显示系统变量:show...
- 如何为MySQL中的JSON字段设置索引
-
背景MySQL在2015年中发布的5.7.8版本中首次引入了JSON数据类型。自此,它成了一种逃离严格列定义的方式,可以存储各种形状和大小的JSON文档,例如审计日志、配置信息、第三方数据包、用户自定...
你 发表评论:
欢迎- 一周热门
-
-
MySQL中这14个小玩意,让人眼前一亮!
-
旗舰机新标杆 OPPO Find X2系列正式发布 售价5499元起
-
【VueTorrent】一款吊炸天的qBittorrent主题,人人都可用
-
面试官:使用int类型做加减操作,是线程安全吗
-
C++编程知识:ToString()字符串转换你用正确了吗?
-
【Spring Boot】WebSocket 的 6 种集成方式
-
PyTorch 深度学习实战(26):多目标强化学习Multi-Objective RL
-
pytorch中的 scatter_()函数使用和详解
-
与 Java 17 相比,Java 21 究竟有多快?
-
基于TensorRT_LLM的大模型推理加速与OpenAI兼容服务优化
-
- 最近发表
- 标签列表
-
- idea eval reset (50)
- vue dispatch (70)
- update canceled (42)
- order by asc (53)
- spring gateway (67)
- 简单代码编程 贪吃蛇 (40)
- transforms.resize (33)
- redisson trylock (35)
- 卸载node (35)
- np.reshape (33)
- torch.arange (34)
- npm 源 (35)
- vue3 deep (35)
- win10 ssh (35)
- vue foreach (34)
- idea设置编码为utf8 (35)
- vue 数组添加元素 (34)
- std find (34)
- tablefield注解用途 (35)
- python str转json (34)
- java websocket客户端 (34)
- tensor.view (34)
- java jackson (34)
- vmware17pro最新密钥 (34)
- mysql单表最大数据量 (35)