VSCode的配置(基于Win10)
VSCode支持多语言,并且轻量美观,是我们理想的IDE典范。
但它对C++其实并没有我们想象的这么友好,这里简单地梳理一下将VSCode从0开始打造成C++神器的过程。
-
T
i
p
s
:
Tips:
Tips:
- 为了减小文件的大小,图片均通过有道云链接的形式给出。//毕竟绝大多数可以不看。
- 文中的超链接除两处网址,其余全为安装过程的图片附释。除MinGW中配置图外,其他可以不必查看。
- 要按照顺序执行。//否则到第五步时可能会绝望地重头再来。
主要步骤
- 在Visual Studio Code官网上下载。然后点击那个蓝色按钮下载。
- 下载MinGW。(如果很慢也可以在清华Tuna的镜像网站上找到OSDN的镜像)
- 配置相关环境变量
- 安装相关插件并配置.json文件
- 可以开始快乐的Coding啦!
MinGW的下载、安装与配置
Minimalist GNU for Windows,所以再说一遍,这是Win10的配置啊~(Mac我也不会)
-
下载后依照不同浏览器特性选择‘保留’或者‘运行’。
-
点击install会显示安装Installation Manager Setup Tool界面,将地址设置为C:\MinGW
(务必安装在C盘根,因为这篇说明时依据C盘安装的)。
点击continue后等待。完成后点击continue.
-
在manager界面左栏中顺次点击(也可依据图示打开)All Packages-MinGW-MinGW Base System,进入编译器配置,勾选如图的变量:
- mingw32-binutils-bin
mingw32-gcc-bin
mingw32-gcc-dev
mingw32-gcc-doc
mingw32-gcc-man
mingw32-gcc-g+±bin
mingw32-gcc-g+±dev
mingw32-gcc-g+±doc
在Source-Level Debugger选项下勾选
mingw32-gdb-bin
- mingw32-binutils-bin
勾选后选择Installation-Apply Changes,稍加等待.
配置环境变量
- 在Windows全局搜索中输入“环境变量”,打开相应设置
- 依照如图顺序新建一个环境,如果刚刚没有安装在C盘根下的话,依据实际位置新建即可,但强烈不建议,因为在后面的.json文件是按照C盘编写的。
- 依次点击确定,保存设置
VSCode相关配置
- 在文件资源管理器(Explorer)中建立文件夹WORKSPACE(这将作为工作区的名字出现,为了不影响VSCode的系统外(逼)观(格),自定义名字请谨慎。
另外,不管是哪一层文件夹或者文件名都不要使用中文,否则会在编译过程中报错。
- 重新打开VSCode,使用快捷键’‘Ctrl+O’'找到刚刚新建的workspace并打开。
- 点击侧栏Extensions,或使用快捷键’‘Ctrl+Shift+X’’,搜索C++。如果需要可以在此搜索’‘language pack’'并安装中文插件,重启后生效。
配置.json文件
先在工作区下,建立.vscode文件夹如图。
现在新建相关配置文件,复制并保存:
launch.json
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole":true,
"MIMode": "gdb",
"miDebuggerPath": "C:\\MinGW\\bin\\gdb.exe",
"preLaunchTask": "g++",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
这里将外部控制台设置为true,与VS风格和使用方法类似。
tasks.json
{
"version": "2.0.0",
"tasks": [
{
"label": "g++",
"type": "shell",
"command": "C:\\MinGW\\bin\\g++.exe",
"args": [
"-g",
"${file}",
"-include",
"${workspaceRoot}\\.vscode\\head.h",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe",
],
"group": {
"kind": "build",
"isDefault": true
},
"options": {
"cwd": "C:\\MinGW\\bin"
},
"problemMatcher": [
"$gcc"
]
}
]
}
你可以在上面这个文件的"args"选项中加入自定义预编译命令,格式为"-D XXX","XXX"是自定义的宏,如果能用得上的话。
"args": [
// "-g",
// "${file}",
// "-include",
// "${workspaceRoot}\\.vscode\\head.h",
// "-o",
// "${fileDirname}\\${fileBasenameNoExtension}.exe",
"-D 宏名",
],
然后利用预编译命令#ifdef - #endif,就可以实现代码块在本地编译运行而在OJ上不运行,可以极大的优化debug体验。也可以将文件输入输出流装在这样的代码块中,后面会说到另一种方法。
settings.json
{
"files.associations": {
"ostream": "cpp",
"iostream": "cpp",
"random": "cpp",
"cstring": "cpp",
"*.tcc": "cpp",
"exception": "cpp",
"istream": "cpp",
"sstream": "cpp",
"charconv": "cpp",
"future": "cpp",
"type_traits": "cpp",
"vector": "cpp",
"xiosbase": "cpp",
"xlocale": "cpp",
"xhash": "cpp",
"xlocbuf": "cpp",
"xstring": "cpp",
"array": "cpp",
"chrono": "cpp",
"string": "cpp",
"unordered_map": "cpp",
"algorithm": "cpp",
"functional": "cpp",
"memory": "cpp",
"optional": "cpp",
"ratio": "cpp",
"system_error": "cpp",
"tuple": "cpp",
"cmath": "cpp",
"fstream": "cpp",
"numeric": "cpp",
"scoped_allocator": "cpp",
"thread": "cpp",
"regex": "cpp",
"utility": "cpp",
"deque": "cpp",
"filesystem": "cpp",
"forward_list": "cpp",
"list": "cpp",
"map": "cpp",
"queue": "cpp",
"set": "cpp",
"stack": "cpp",
"unordered_set": "cpp",
"xlocmon": "cpp",
"xmemory": "cpp",
"xtr1common": "cpp",
"xtree": "cpp",
"xutility": "cpp",
"csetjmp": "cpp",
"complex": "cpp",
"limits": "cpp",
"iosfwd": "cpp",
"xlocnum": "cpp",
"xloctime": "cpp",
"bitset": "cpp",
"streambuf": "cpp",
"valarray": "cpp",
"codecvt": "cpp",
"iomanip": "cpp",
"iterator": "cpp",
"*.rh": "cpp",
"cstdio": "cpp"
},
"C_Cpp.dimInactiveRegions": true,
"C_Cpp.errorSquiggles": "Enabled"
}
c_cpp_properties.json
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"compilerPath": "C:\\MinGW\\bin\\g++.exe",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "gcc-x64"
}
],
"version": 4
}
head.h
#include <stdlib.h>
#include <stdio.h>
static void before(void) __attribute__((constructor));
static void after(void) __attribute__((destructor));
static void middle(void);
static void before()
{
system("chcp 65001"); //切换字符集
system("cls");
}
如果习惯VS风格的,这个文件已经够用了。
但如果想让外部控制台成为Dev风格,可以在后面加
static void after()
{
system("pause");
}
下面这一段如果不感兴趣可以跳过。
一个debug方法,在学长的基础上利用文件方法,删减了使用snippet的麻烦:
- 三窗口自动debug:可以在head文件的before和after段落中加入相应的文件流语句,debug时只需将测试数据一次键入输入文件’.in’,然后就可以在’.out’文件中连续查看输出结果,成品head文件如下:
#include <stdlib.h>
#include <stdio.h>
static void before(void) __attribute__((constructor));
static void after(void) __attribute__((destructor));
static void middle(void);
static void before()
{
system("chcp 65001"); //切换字符集
system("cls");
freopen("文件名", "r", stdin);
freopen("文件名", "w", stdout);
}
static void after()
{
fclose(stdin);
fclose(stdout);
system("pause");
}
大功基本告成,还是要用实际编译运行检验配置是否无误。
建立文件和文件夹之前,我们可以用首选项设置快捷键,VSCode没有默认新建快捷键,当初从VS过来时感到很不快。既然没有默认,按照个人喜好即可。