笔者之前在实验室学长的推荐下,一直使用VS完成代码的编辑调试工作,但了解到对于文档编译这一功能,VS只支持windows下的多文件编译,无法在Ubantu系统下完成该工作,所以转而进行VScode的使用学习。
在本文中笔者将分享一些关于这几天安装调试VScode,配置C++编译环境过程中的一些心得体会,一方面希望为读者提供一定的帮助,一方面帮助我自己在日后的配置过程中,回顾之前踩过的坑。
VScode下载
关于VScode的下载,笔者是在其官网直接下载的,之后按照正常的下载流程逐步安装即可。
MinGW的安装
MinGW是什么?
MinGW 提供了一套简单方便的Windows下的基于GCC 程序开发环境。MinGW 收集了一系列免费的Windows 使用的头文件和库文件;同时整合了GNU ( http://www.gnu.org/ )的工具集,特别是GNU 程序开发工具,如经典gcc, g++, make等。MinGW是完全免费的自由软件,它在Windows平台上模拟了Linux下GCC的开发环境,为C++的跨平台开发提供了良好基础支持,为了在Windows下工作的程序员熟悉Linux下的C++工程组织提供了条件。
简单理解,MinGW为windows系统提供了一个C/C++编译环境。
这里就涉及VS和VScode的区别,VScode实际上就是一个“文本文档”,刚刚下载完成的VScode仅仅具有文本编辑功能,而VS具备了文本编辑、代码编译、运行调试等诸多功能,但相对应的,VS的体积也非常大,所以在便捷性上,VScode明显优于VS。
但这也意味着,想要让VScode具备各种各样的功能,就要完成更多的配置工作。
具体的MinGW安装,还要涉及配置环境变量等工作,具体的操作可以参考该文章:
https://blog.csdn.net/qq_43041976/article/details/100542557
注意,MinGW的安装路径要搞清楚,无论是配置环境变量还是配置编译环境,都要用到其地址。
什么是环境变量
环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置和系统文件夹位置等。
环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息。例如Windows和DOS操作系统中的path环境变量,当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应到path中指定的路径去找。用户通过设置环境变量,来更好的运行进程。
这里笔者想到了在调试STM32和MK66单片机过程中,需要将调用到的.h文件添加到一个特定的位置,让编译器可以找到文件在哪,与这里的配置环境变量或许有异曲同工之妙。
环境变量位置为:此电脑 - 属性 - 高级系统设置 - 高级 - 环境变量 - 系统变量 - Path
C++小工程构成
结合笔者的实际配置经验,想要在VScode中运行C++程序,至少要有以下几个组成部分:
- 工程文件夹
- 一个名为.vscode的文件夹
- 一个cpp后缀名文件
- c_cpp_properties.json文件
- launch.json文件
- tasks.json文件
笔者完全采用新建的方式完成了这几个文件的创建,完成后在VScode界面左侧的资源管理器会出现如下图的工程结构:
在建立工程中,我首先创建了一个名为VSCODE_TEST的文件夹,在该文件夹中创建了名为helloWorld.cpp的文件,同时创建了名为.vscode的文件夹,将三个json文件创建在这个.vscode文件夹中。
图中显示的.exe文件是编译成功后工程自动生成的运行文件。
cpp及json文件中的代码
- cpp文件
cpp文件是我们书写主函数的文件,在该文件中,只需要完成最基本的C++代码即可,这次我采用打印“我爱SLAM”来测试工程是否运行正常。
#include <iostream>
using namespace std;
int main()
{
cout<<"我爱SLAM"<<endl;
system("pause");
return 0;
}
- c_cpp_properties.json
该文件是编译运行的重要文件之一,涉及多个MinGW文件地址的写入,这些地址的获取在前述文章中有提到,其中第一条地址需要根据实际地址自行修改,其余的则可以直接通过“运行”窗口输入指令直接生成。
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceRoot}",
"E:/MinGW/mingw64/include/**",
"E:/MinGW/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++",
"E:/MinGW/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/x86_64-w64-mingw32",
"E:/MinGW/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/backward",
"E:/MinGW/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include",
"E:/MinGW/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include-fixed",
"E:/MinGW/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/include"
],
"defines": [
"_DEBUG",
"UNICODE",
"__GNUC__=6",
"__cdecl=__attribute__((__cdecl__))"
],
"intelliSenseMode": "msvc-x64",
"browse": {
"limitSymbolsToIncludedHeaders": true,
"databaseFilename": "",
"path": [
"${workspaceRoot}",
"E:/MinGW/mingw64/include/**",
"E:/MinGW/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++",
"E:/MinGW/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/x86_64-w64-mingw32",
"E:/MinGW/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/backward",
"E:/MinGW/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include",
"E:/MinGW/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include-fixed",
"E:/MinGW/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/include"
]
}
}
],
"version": 4
}
- launch.json
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "g++.exe - 生成和调试活动文件",
"type": "cppdbg", // 只能是cppdbg
"request": "launch", // launch:启动,attach:附加
"program": "${fileDirname}\\${fileBasenameNoExtension}.exe", // 需要调试的程序
"args": [], // 调试时传递给程序的参数
"stopAtEntry": false, // 调试时是否停在程序入口:{true:是,false:否}
"cwd": "${workspaceFolder}", // 工作目录
"environment": [], // 额外的环境变量
"externalConsole": true, // true:输出到外部终端;false:只输出到软件终端(有显示不全的可能)
"MIMode": "gdb",
"miDebuggerPath": "E:\\MinGW\\mingw64\\bin\\gdb.exe", // 调试gdb路径
"setupCommands": [ // 暂时不知道作用
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "C/C++: g++.exe build active file" // 预编译任务名称,和tasks.json中的label必须相同
}
]
}
该文档一些语句的功能已经在注释中标出,注意这里同样要结合自己的MinGW修改gdb.exe的地址。
- tasks.json
{
"tasks": [
{
"type": "shell",
"label": "C/C++: g++.exe build active file",
"command": "E:\\MinGW\\mingw64\\bin\\g++.exe",
"args": [
"-g",
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
}
}
],
"version": "2.0.0"
}
同样注意,这里要自行修改g++.exe的地址。
运行程序
在以上工作完成后,在cpp文件界面(不知道为什么要在这个文件,否则会报错),点击左侧的运行界面(一个小虫子),点击运行程序,即可实现程序的运行。运行结果如图:
这里由于在launch.json文件设置为"externalConsole": true, 所以可以出现黑色的程序运行框,如果设置为false,则会在下方的“终端”输出打印。
另外在输出汉字的时候,可能会出现乱码,笔者参照百度到的设置方法,实现了汉字的正常显示,具体方法为重新设置地区,并且在一个地方打上勾勾。
具体流程见该文章:
https://blog.amahv.cn/2020/06/24/vscode-shu-chu-chuang-kou-zhong-wen-luan-ma/
后记
这里没有提到VScode插件的使用,以及一些具体的安装过程,也还没有涉及到cmake的使用,建议读者多方查阅其他网友的分享,肯定会收获很多。
在本次配置VScode过程中,初步感受了其复杂和优雅之处,之后在Ubantu系统下配置时,应该会再出一篇总结文章。
感谢您的阅读!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2013-04-25 2009-11-13 08:37 实现文件读写操作的几种方法
2013-04-25 C++的头文件和实现文件分别写什么
2013-04-25 C++头文件编译问题