VSCode配置

VScode 全称:Visual Studio Code

是一种代码编辑器,并不是一种IDE

以下配置都是基于Windows系统而成,对于Mac以及Linux建议参考官方文档……(其实是我不会太菜辽呜呜呜~)

作为主写C++的我 自然要对其进行一番配置 主要配置内容以及过程如下

配置电脑C++编译运行环境

推荐MinGw 作为Windows上的主流C++编译器。

MinGW可以下载Online Installer然后选择对应的版本号进行安装,在这里可以选择8.1.0, posixseh。对于不同版本的对比可以参考这篇StackOverflow

安装完成后将MinGW安装目录/bin文件夹(例如D:\mingw64\bin)加入环境变量,具体可以参考这篇文档。加入环境变量后重新开启一个命令行然后输入g++ --version就可以看到安装好的MinGW的版本号了。

安装并配置C++插件

在vscode的插件商店中 选择C/C++ for Visual Studio Code插件以及code run插件等。

配置IntelliSence

建立一个写代码的文件夹 建议在二级目录下,在VS Code中打开,然后在VS Code中按Ctrl + Shift + P输入命令C/C++: Edit Configurations...,VS Code会自动在项目文件夹根目录新建配置文件夹.vscode并同时在.vscode中新建配置文件c_cpp_properties.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"compilerPath": "D:/mingw64/bin/gcc.exe",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "gcc-x64"
}
],
"version": 4
}

然后介绍其中重要的部分:

c_cpp_properties.json中共包含三部分:

env:可以在这里定义用户变量,在下面的configuration中可以使用这里定义的变量来代替多次重复出现的地址等配置。

configurations:在这里配置IntelliSence选项。每一个选项都会有默认值。

version:指c_cpp_properties.json的版本,这里不需要作修改。

configurations中包含以下配置项:

name:配置文件名称,在这里如果根据系统填”Linux”, “Mac”或者”Win32”,那么插件会自动根据这里填写的系统名称来读取默认值。在VS Code的状态栏中会显示这一配置名称。通过点击状态栏中的名称可以更换配置。在这里我们指定为Win32

intelliSenseMode:如果插件设置中C_Cpp.intelliSenseEngine设置为”default”的话,这里可以指定IntelliSence的模式。msvc-x64对应Visual Studio模式,clang-x64对应Clang模式,gcc-x64对应GCC模式。Windows默认使用msvc-x64,macOS默认使用clang-x64,Linux默认使用gcc-x64,在这里由于我们用的是GCC,因此修改为gcc-x64

includePath:指定IntelliSence在目录中搜索源文件所包含(#include)的头文件。这与在命令行中调用编译器时用-I选项指定的路径是一样的。如果路径末尾是/**的话IntelliSence会自动加载所有的子目录。如果是Windows系统并且安装了Visual Studio 的C++功能,或者配置了compilePath,这里可以不做配置。

macFramePath:同上,指定macOS框架的头文件目录地址。

defines:这里可以指定在编译过程中所调用的预处理符号的内容,与命令行调用编译器时-D选项指定的内容是一样的。如果是Windows系统并且安装了Visual Studio 的C++功能,或者配置了compilePath,这里可以不做配置。

forceInclude:(可选)强制加载的头文件,优先于源文件中指定的头文件,按照配置文件里的顺序加载,这里不需要配置。

compilerPath :(可选)编译器的绝对路径。插件会根据编译器决定includePath和default define的值。可以在路径后附加选项,例如-nostdinc++, -m32, -fno-ms-extensions等等。如果选项有空格需要用双引号()括起来。这里需要找到刚才安装的MinGW中gcc.exe的位置,例如C:/Dev/MinGW/mingw64/bin/gcc.exe

cStandard:C的标准,这里填c11

cppStadard:C++的标准,这里填cpp17

参考资料:https://code.visualstudio.com/docs/cpp/c-cpp-properties-schema-reference

配置编译选项

VS Code通过Tasks来执行编译和运行操作。在.vscode文件夹中新建文件tasks.json进行配置。或者以上以下操作都可以先写一个C++文件然后运行修改即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
{
"version": "2.0.0",
"tasks": [
{
"label": "Build",
"command": "D:/mingw64/bin/g++.exe",
"type": "shell",
"args": [
"-g",
"-Wall",
"-std=c++11",
"-lm",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}.exe"
],
"presentation": {
"reveal": "always",
"echo": true,
"focus": true
},
"problemMatcher": {
"owner": "cpp",
"fileLocation": ["relative", "${workspaceRoot}"],
"pattern": {
"regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
},
"group": {
"kind": "build",
"isDefault": true
}
},
{
"label": "Run",
"type": "shell",
"dependsOn": "Build",
"command": "${fileDirname}/${fileBasenameNoExtension}.o",
"windows": {
"command": "${fileDirname}/${fileBasenameNoExtension}.exe"
},
"args": [],
"presentation": {
"reveal": "always",
"focus": true
},
"problemMatcher": [],
"group": {
"kind": "test",
"isDefault": true
}
}
]
}

然后介绍其中重要的部分:

label:任务标签。

type:任务类型,一般指定为shellprocess。当设置为shell时会将命令看作终端操作,包括bash、cmd或PowerShell。当指定为process时会将命令看作是一个进程。这里选择shell

command:命令内容,这里指定编译器的路径,比如g++的路径C:/Dev/MinGW/mingw64/bin/g++.exe

args:命令的参数列表。

windows:Windows特定的配置属性,例如macOS和Linux上指定编译的输出文件为.o,而Windows下指定编译的输出文件为.exe

group:指定任务的分组归属。例如指定grouptest,那么可以通过命令面板的Run Test Task运行该任务。

presentation:指定如何在界面上显示任务输出。

reveal:在执行任务时是否显示内置的终端面板,可选的值包括:always:始终显示;never:从不显示;silent:只在不扫描错误和警告时显示。默认值为always

focus:终端是否在输入时激活。默认值为false

echo:是否将执行的命令输出到终端中。默认值为true

showReuseMessage:是否显示”终端将被任务重用,按任意键关闭。“这一消息。

panel:控制是否在各任务间共享终端输出。

shared:共享终端,所有任务的输出都会在同一个终端内显示。

dedicated:每一个任务都有自己的输出终端,但是对于同一个任务来说,如果被重复执行的话仍会在同一个终端内显示。

new:无论是否是同一个任务都会打开一个新的输出终端。

clear:在任务执行之前是否清空输出终端,默认值为false

group:指定任务输出的分组,同一个分组的任务会共享终端而非开启新终端。

problemMatcher:将编译器输出的错误映射至VS Code的问题面板。具体可以参考Defining a problem matcher

配置Debug选项

如果要启用Debug,需要在.vscode文件夹下创建launch.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
{
// 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
// https://github.com/Microsoft/vscode-cpptools/blob/master/launch.md
"version": "0.2.0",
"configurations": [
{
"name": "Python: 当前文件",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal"
},
{
"name": "(gdb) Launch", // 配置名称,将会在启动配置的下拉菜单中显示
"type": "cppdbg", // 配置类型,这里只能为cppdbg
"request": "launch", // 请求配置类型,可以为launch(启动)或attach(附加)
"program": "${fileDirname}/${fileBasenameNoExtension}.o", // 将要进行调试的程序的路径
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"externalConsole": true,
"environment": [],
"MIMode": "gdb",
"windows": {
"program": "${fileDirname}/${fileBasenameNoExtension}.exe",
"miDebuggerPath": "D:/mingw64/bin/gdb.exe" // 修改为本机gdb.exe的路径
},
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "Build"
}
]
}

然后介绍其中重要的部分:

program:(必填项)指定Debugger程序路径,在这里修改成本机gdb.exe的路径。

symbolSearchPath:指定符号文件的路径。

externalConsole:在Windows中,设置为true调用外部终端,设置为false调用VS Code集成终端;在Linux中,设置为true调用会通知VS Code启动外部终端,设置为false会调用VS Code集成终端;在macOS中,设置为true会通过lldb-mi调用外部终端,设置为false会在Debug面板中显示输出。

args:参数列表。

cwd:终端启动时所在的路径。

environment:环境变量。

MIMode:指定VS Code连接的Debugger的类型,必须是gdb或者lldb中一种。

miDebuggerPath:Debugger路径。如果没有指定完整路径,VS Code会搜索系统变量PATH

miDebuggerArgs:传递给Debugger的参数列表。

stopAtEntry:是否在程序入口暂停。默认值为false

type:指定Debugger类型,对于Visual Studio Windows debugger需要指定为cppvsdbg,对于GDB或者LLDB需要指定为cppdbg.

参考资料:https://code.visualstudio.com/docs/cpp/launch-json-reference

设置代码格式化

这一部分我没有具体配置 可参考:

在VS Code里可以通过Shift + ALt + F对整篇代码进行格式化,或者选中一段代码通过Ctrl + K Ctrl + F来进行段落的格式化。也可以在设置中设置editor.formatOnSave设定在保存时自动格式化或editor.formatOnType设定在输入时自动格式化。默认VS Code调用Clang Format对代码进行格式化,因此在项目文件夹下新建.clang-format文件来指定格式化样式。由于Clang Format可以设置的项目非常多,因此这里只举例说明:

1
2
3
4
5
6
7
8
UseTab: false
IndentWidth: 4
BreakBeforeBraces: Stroustrup
AllowShortIfStatementsOnASingleLine: false
IndentCaseLabels: true
ColumnLimit: 0
Standard: Cpp11
Cpp11BracedListStyle: true

然后介绍其中重要的部分:

UseTab:用Tab或空格控制缩进。

IndentWidth:缩进长度。

BreakBeforeBraces:在括号前是否换行。

AllowShortIfStatementsOnASingleLine:是否将 if (a) return;放在同一行。

IndentCaseLabels:对于switch语句,case是否缩进。

ColumnLimit:限制一行的长度。

Standard:cpp标准,Cpp03会适应C++03标准,cpp11会适应C++11、C++14和C++17标准。例如, C++03标准的A<A<int> >会被替换为C++11标准的A<A<int>>

Cpp11BracedListStyle:使用C++11的列表格式

后续

完成以上步骤以后你会得到一个.vscode文件夹(包含三个配置文件)以及.clang-format文件。之后再新建项目时直接将这个文件夹复制过去即可。

打开一个.cpp文件然后按F5即可启动调试。按Ctrl + Shift + P然后输入Run Build Task即可编译。输入Run Test Task即可运行。在设置中可以为这两个选项添加快捷键绑定。按Ctrl + Shift + F可以格式化代码。

以上。

参考资料

VS Code 搭建 C/C++ 编译运行环境的三种方案

C/C++ for Visual Studio Code (Preview)

c_cpp_properties.jsonReference Guide

Configuring launch.json for C/C++ debugging

Variables Reference

Customizing IntelliSense

Integrate with External Tools via Tasks

Clang-Format Style Options