VS Code中C++编译和调试环境配置(Win10)

准备工作

VS Code的安装

  在VS Code安装包下载页面选择相应的版本进行下载:

C++和简体中文扩展插件安装

简体中文插件

  首先在扩展应用商店中搜索chinese,并选择第一个扩展进行安装,点击Install之后重启vscode即可:

C++插件

  在左侧应用商店中搜索C++,并选择第一个扩展插件进行安装,点击Install即可:

安装和配置MinGW

  MinGW的安装这里建议使用离线包的安装,因为使用方便,直接解压即可。
  一、下载离线包
  准备中给出的离线包连接中选择任意一个版本的x86_64-posix-seh下载即可。

  二、解压并存放
  使用7z或其他解压工具进行解压,并将其中的mingw整个文件夹复制到自己想要存放的位置,路径中不要有中文,而且建议路径不要太长,省的寻找的时候麻烦。比如我将mingw存放在路经C:\myprogram之下。
  三、添加至环境变量中
  将mingw中的bin目录添加到系统的环境变量中,方法如下:
  1. 找到“系统环境变量”的设置位置,在开始菜单的搜索栏搜索环境变量
  2. 添加系统环境变量,依此:点击环境变量,找到系统变量中的path,点击编辑,然后点击新建,在使用浏览按钮选中到mingw下的bin文件夹即可。
  效果如下图所示:

  四、验证是否配置成功
  在cmd命令行窗口中输出:gcc -v,如果成功则显示如下信息gcc version 8.1.0

创建配置文件

  根据官方的文档,需要创建以下三个配置文件,以用于编译和运行cpp文件,这里需要先创建一个工作区文件夹,用来保存相关配置文件和将来创建的源代码文件,这里我自己创建了一个命名为vscpp的文件夹(以下均称该文件夹为工作区),如下图所示:
  以下文件夹和文件可以手动创建,也可以随便打开一个工作空间中的cpp文件然后使用F5自动根据模板创建launch.jsontasks.json,其中c_cpp_properties.json文件可以通过VS Code的命令面板中的C/C++:Edit Configurations命令创建。
  工作空间中的配置文件都存放在名为.vscode的文件夹中:
  接下来分别是三个配置文件的内容:
  1.首先是c_cpp_properties.json

//由于该文件不允许注释,因此这里单独列出,如需复制请使用下面没有注释的文件
//该配置文件请以命令自动创建的模板为准
//这里只告知相关参数的含义
{
    "configurations": [
        {
            "name": "Win32",
            "includePath": [                  //include头文件的路径,一般现在系统路径下找,然后才是这个配置项中的目录
                "${workspaceFolder}/**"       //这里表示工作空间路径,**表示递归查询目录下的所有头文件
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            "windowsSdkVersion": "10.0.18362.0",
            "compilerPath": "C:\\myprogram\\mingw64\\bin\\g++.exe",  //编译器的路径,使用自己的编译器路径,主要用于智能提示时查找系统路径下的头文件,不如mingw64中的include文件夹
            "cStandard": "c17",               //使用的C和C++标准
            "cppStandard": "c++17",
            "intelliSenseMode": "gcc-x64"     //智能提示的规则,命令行创建该文件时会检测你电脑上现有的智能提示模式,如果安装过vs2010之类的,可能就是msvc之类的,如果使用了mingw64,建议改为gcc-x64
        }
    ],
    "version": 4
}

  无注释的文件内容为:

{
    "configurations": [
        {
            "name": "Win32",
            "includePath": [
                "${workspaceFolder}/**"
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            "windowsSdkVersion": "10.0.18362.0",
            "compilerPath": "C:\\myprogram\\mingw64\\bin\\g++.exe",
            "cStandard": "c17",
            "cppStandard": "c++17",
            "intelliSenseMode": "gcc-x64"
        }
    ],
    "version": 4
}

  2.其次是launch.json

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "g++.exe build and debug active file",
      "type": "cppdbg",
      "request": "launch",
      "program": "${fileDirname}\\${fileBasenameNoExtension}.exe",      //调试的可执行文件的路径,这里直接引用了当前打开的活动窗口中的文件路径中同名的.exe文件
      "args": [],                                                       //可执行文件的参数
      "stopAtEntry": false,                                             //是否再可执行文件入口处停止
      "cwd": "${fileDirname}",                                          //调试命令启动时的路径,建议使用文件所在路径,方便再同文件夹下搜索依赖的头文件或者输入输出文件
      "environment": [],
      "externalConsole": true,                                          //若参数为true,输出结果就会在cmd窗口中显示,若为false,输入输出则显示在VS Code内置的终端中
      "MIMode": "gdb",
      "miDebuggerPath": "C:\\myprogram\\mingw64\\bin\\gdb.exe",         //debug调试器的路径,只需将本行的路经改为自己的gdb.exe路径即可,以我的为例,注意需要将斜线改为双斜线(由于文件路径的斜杠表示方法不同,所以需要转义)
      "setupCommands": [
        {
          "description": "Enable pretty-printing for gdb",
          "text": "-enable-pretty-printing",
          "ignoreFailures": true
        }
      ],
      "preLaunchTask": "g++.exe build active file"                      //前置任务名称,即tasks中的任务label名称(要保持一致),即先通过tasks进行编译再启动调试
    }
  ]
}

  3.最后是tasks.json

{
  "version": "2.0.0",
  "tasks": [                                                            //定义编译任务
    {
      "type": "shell",                                                  //命令类型
      "label": "g++.exe build active file",                             //tasks的任务名称
      "command": "C:\\myprogram\\mingw64\\bin\\g++.exe",                //将本行的路经改为g++.exe所在的路经,以我的为例,将斜线改为双斜线
      "args": ["-g", "${file}", "-o", "${fileDirname}\\${fileBasenameNoExtension}.exe"], //g++命令的编译参数,-g表示带调试信息,file表示引用当前打开的文件,-o表示指定输出文件名,指定为同文件路径下同名的.exe后缀的可执行文件
      "options": {
        "cwd": "${workspaceFolder}"                                     //编译命令的执行时的路径,建议在工作空间内
      },
      "problemMatcher": ["$gcc"],                                       //用于检测编译是否完成,如果匹配到相应的输入信息,则判断当前任务已经完成,可以不同改动
      "group": {
        "kind": "build",
        "isDefault": true
      }
    }
  ]
}

创建cpp文件进行测试


- 在工作区中创建的所有cpp文件,或者文件夹中的子文件都可以使用到以上的配置
- 因此可以根据自己的需求创建不同的文档管理源代码

  此处,我创建了learnC++文件夹,用于存放学习C++时候编写的源代码文件,以便于和其他做以区分。
  首先在learnC++文件夹中创建一个cpp文件,比方说创建一个main.cpp用于打印输出Hello World!:

#include<iostream>
using namespace std;
int main(void){
    cout<<"Hello World!"<<endl;             //输出Hello World!
    system("pause");                        //如果使用外部终端,则需要加上这句防止cmd窗口运行结束后直接退出
    return 0;
}

  使用F5编译运行并调试,效果如下所示(可在代码左侧打上断点):