一 安装MinGW或者Clang(这里以MinGW为例)
我们不搞那个需要安装的,直接提供免安装的mingw 点击此处 提取码: bthj
下载后解压,完成后来配置C/C++环境变量,参考博文:win10配置C/C++环境变量
二 安装并配置C/C++插件
访问C/C++ - Visual Studio Marketplace点击Install启动VS Code安装插件即可。
可以参考官方文档来配置C/C++插件,这里着重对官方文档中没有讲明白的部分进行强调。比较懒的同学可以直接跳过每一节后面详细配置部分,直接复制配置修改对应编译器和Debugger的位置即可使用。下面均以Windows系统为主,macOS和Linux可以根据详细配置部分自行修改。
2.1 配置IntelliSence
新建一个项目文件夹,在VS Code中打开,然后在VS Code中按Ctrl + Shift + P
输入命令C/C++: Edit Configurations...
,VS Code会自动在项目文件夹根目录新建配置文件夹.vscode并同时在.vscode中新建配置文件c_cpp_properties.json。
先给出配置文件内容:
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"compilerPath": "E:\\mingw64\\bin\\gcc.exe",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "clang-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的位置,例如E:/mingw64/bin/gcc.exe
。
cStandard
:C的标准,这里填c11。
cppStadard
:C++的标准,这里填cpp17。
compileCommands
:(可选)
2.2 配置编译和运行选项
VS Code通过Tasks来执行编译和运行操作。在.vscode文件夹中新建文件tasks.json
进行配置。
先给出配置文件内容:
{
"version": "2.0.0",
"tasks": [
{
"label": "Build",
"command": "E:/mingw64/bin/g++.exe", // 修改这里为本机g++路径
"type": "shell",
"args": [
"-g",
"-Wall",
"-std=c++11",
"-lm",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}.exe" //Linux和macOS这里要修改为.o
],
"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
:任务类型,一般指定为shell或process。当设置为shell时会将命令看作终端操作,包括bash、cmd或PowerShell。当指定为process时会将命令看作是一个进程。这里选择shell。
command
:命令内容,这里指定编译器的路径,比如g++的路径C:/Dev/MinGW/mingw64/bin/g++.exe。
args
:命令的参数列表。
windows
:Windows特定的配置属性,例如macOS和Linux上指定编译的输出文件为.o,而Windows下指定编译的输出文件为.exe。
group
:指定任务的分组归属。例如指定group为test,那么可以通过命令面板的Run Test Task运行该任务。
presentation
:指定如何在界面上显示任务输出。
reveal
:在执行任务时是否显示内置的终端面板,可选的值包括:always:始终显示;never:从不显示;silent:只在不扫描错误和警告时显示。默认值为always。
focus
:终端是否在输入时激活。默认值为false。
echo
:是否将执行的命令输出到终端中。默认值为true。
showReuseMessage
:是否显示”终端将被任务重用,按任意键关闭。“这一消息。
panel
:控制是否在各任务间共享终端输出。
shared
:共享终端,所有任务的输出都会在同一个终端内显示。
dedicated
:每一个任务都有自己的输出终端,但是对于同一个任务来说,如果被重复执行的话仍会在同一个终端内显示。
new
:无论是否是同一个任务都会打开一个新的输出终端。
clear
:在任务执行之前是否清空输出终端,默认值为false。
group
:指定任务输出的分组,同一个分组的任务会共享终端而非开启新终端。
problemMatcher
:将编译器输出的错误映射至VS Code的问题面板。
2.3 配置Debug选项
先给出配置文件内容:
{
// 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": "(gdb) Launch", // 配置名称,将会在启动配置的下拉菜单中显示
"type": "cppdbg",// 配置类型,这里只能为cppdbg
"request": "launch", // 请求配置类型,可以为launch(启动)或attach(附加)
"program": "${fileDirname}/${fileBasenameNoExtension}.o", // 将要进行调试的程序的路径
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"externalConsole": false,
"environment": [],
"MIMode": "gdb",
"windows": {
"program": "${fileDirname}/${fileBasenameNoExtension}.exe",
"miDebuggerPath": "E:/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。
三 总结
完成以上步骤以后你会得到一个.vscode文件夹(包含三个配置文件)。之后再新建项目时直接将这个文件夹复制过去即可。
打开一个.c或者.cpp文件然后按F5即可启动调试。按Ctrl + Shift + P然后输入Run Build Task即可编译。输入Run Test Task即可运行。在设置中可以为这两个选项添加快捷键绑定。