在VS Code中编译C++使用Mingw-w64

1.安装Visual Studio Code程序。建议选择其他下载System Installer 64bit,这个可以选择安装路径到其他盘符
System Installer 64bit.png

2.安装VS CodeC/C++扩展。您可以通过在"扩展(Extension)"视图(Ctrl + Shift + X)中搜索c++来安装C/C++扩展。
VS Code的C/C++扩展.png
如果需要中文界面可以下载Chinese (Simplified)扩展
extension for Chinese (Simplified).png
3.通过SourceForge网站将Mingw-w64安装到其路径中没有空格的文件夹(换句话说,不是C/Program Files/的默认位置)。在本教程中,我们假定将其安装在下C:\mingw-w64.
mingw-w64-install.png
您也可以下载离线版本x86_64-win32-seh直接解压到指定目录即可如:C:\mingw64
4. 将您的Mingw-w64 bin文件夹的路径添加到Windows PATH环境变量。
Mingw-w64 PATH环境变量.png
5. 检查您的MinGW安装
要检查您的Mingw-w64工具是否已正确安装并可用,请打开新的命令提示符并键入:
g++ --version 检查GCC编译器版本
gdb --version 检查GDB调试器版本
检查您的MinGW安装.png
6. 创建工作区
在本地创建一个文件夹当作VSCode的工作区,在该文件夹中按Shift+右键,选择在此处打开 Powershell 窗口,并通过输入以下命令在该文件夹中打开VS Code:

mkdir projects
cd projects
mkdir helloworld
cd helloworld
code .

该文件夹中打开VS Code.png
7. 添加源代码文件
在文件资源管理器标题栏中,选择“ 新建文件”按钮并命名该文件helloworld.cpp
VSCode新建文件.png
现在粘贴此源代码:

#include <iostream>
#include <vector>
#include <string>

using namespace std;

int main()
{
   vector<string> msg {"Hello", "C++", "World", "from", "VS Code", "and the C++ extension!"};

   for (const string& word : msg)
   {
      cout << word << " ";
   }
   cout << endl;
}

现在按Ctrl + S保存文件。文件资源管理器视图(Ctrl + Shift + E)
您还可以通过选中文件主菜单中的自动保存,启用自动保存以自动保存文件更改。
文件自动保存.png
8. 尝试自动补全感知
在新helloworld.cpp文件中,将鼠标悬停在vector或上string以查看类型信息。声明msg变量后,msg.像在调用成员函数时一样开始键入。您应该立即看到一个显示所有成员函数的完成列表,以及一个显示该msg对象的类型信息的窗口:
自动补全感知.png
您可以按Tab键插入选定的成员。然后,当您添加左括号时,您将看到有关该函数所需的任何参数的信息。
9. 编译helloworld.cpp
接下来,您将创建一个tasks.json文件来告诉VS Code如何构建(编译)程序。该任务将调用g++编译器以基于源代码创建可执行文件。
从主菜单中,选择终端(Terminal) > 配置默认生成任务(Configure Default Build Task)。在下拉列表中,将显示任务下拉列表,其中列出了C ++编译器的各种预定义构建任务。选择g++.exe build active file,该文件将构建编辑器中当前显示(活动)的文件。
配置默认生成任务.png
g++.exe构建活动文件.png
这将tasks.json在.vscode文件夹中创建一个文件,然后在编辑器中将其打开。
您的新tasks.json文件应类似于以下JSON:

{
// 有关 tasks.json 格式的文档,请参见
    // https://go.microsoft.com/fwlink/?LinkId=733558
    "version": "2.0.0",
    "tasks": [
        {
            "type": "shell",
            "label": "g++.exe build active file",
            "command": "C:\\mingw64\\bin\\g++.exe",
            "args": [
                "-g",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe"
            ],
            "options": {
                "cwd": "C:\\mingw64\\bin"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ]
}

command设置指定要运行的程序;在这种情况下是g++。该args数组指定将传递给g++的命令行参数。必须按照编译器期望的顺序指定这些参数。该任务告诉g ++获取活动文件(${file}),对其进行编译,然后在当前目录(${fileDirname})中创建一个与活动文件同名但.exe扩展名为(${fileBasenameNoExtension}.exe)的可执行文件,helloworld.exe以我们的示例为例。
label值就是您将在任务列表中看到的值;您可以随意命名。
对象中的"isDefault": truegroup指定当您按Ctrl + Shift + B时将运行此任务。此属性仅出于方便起见;如果将其设置为false,您仍然可以从“终端”菜单中使用运行生成任务来运行它。

  1. 运行构建
  • 1.回到helloworld.cpp。您的任务将生成活动文件,并且您要生成helloworld.cpp
  • 2.要运行中定义的构建任务tasks.json,请按Ctrl + Shift + B或从终端主菜单中选择运行生成任务
  • 3.任务开始时,您应该看到“集成终端”面板出现在源代码编辑器下方。任务完成后,终端将显示编译器的输出,指示构建成功还是失败。对于成功的g ++构建,输出如下所示:
    集成终端指示构建成功还是失败.png
  • 4.使用+按钮创建一个新终端,您将拥有一个新终端(运行PowerShell),并将该helloworld文件夹作为工作目录。运行dir,您现在应该看到可执行文件helloworld.exe
    终端运行.helloworld.png
  • 5.您可以helloworld在终端中输入来运行.\helloworld.exe
  1. 修改task.json
    您可以tasks.json使用"${workspaceFolder}\\*.cpp"代替的参数来修改以构建多个C ++文件${file}。这将生成.cpp当前文件夹中的所有文件。您也可以通过替换"${fileDirname}\\${fileBasenameNoExtension}.exe"为硬编码的文件名(例如"${workspaceFolder}\\myProgram.exe")来修改输出文件名。
  2. 调试helloworld.cpp
    接下来,您将创建一个launch.json文件来配置VS Code,以在您按F5调试程序时启动GDB调试器。从主菜单中,选择调试>添加配置...,然后选择C++(GDB/LLDB)
    调试 添加配置.png
    C++(GDB/LLDB).png
    然后,您将看到各种预定义调试配置的下拉列表。选择g++.exe build and debug active file
    g++.exe构建并调试活动文件.png
    VS Code创建一个launch.json文件,在编辑器中将其打开,然后生成并运行“ helloworld”。
{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "g++.exe build and debug active file",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "C:\\mingw64\\bin\\gdb.exe",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "g++.exe build active file"
        }
    ]
}

program设置指定要调试的程序。在这里,它被设置为活动文件文件夹${fileDirname}.exe扩展名的活动文件名${fileBasenameNoExtension}.exe,如果helloworld.cpp是,则为活动文件helloworld.exe
默认情况下,C ++扩展名不会在源代码中添加任何断点,并且其stopAtEntry值设置为false。将stopAtEntry值更改true为会导致调试器main在启动调试时在该方法上停止。
13. 开始调试会话
回到helloworld.cpp它是活动文件。
F5或从主菜单中选择调试>启动调试。在开始浏览源代码之前,让我们花一点时间注意用户界面中的一些更改:
集成终端出现在源代码编辑器的底部。在调试输出选项卡中,您将看到指示调试器已启动并正在运行的输出。
编辑器突出显示方法中的第一条语句main。这是C ++扩展自动为您设置的断点:
左侧的“调试”视图显示调试信息。您将在本教程的后面看到一个示例。

在代码编辑器的顶部,将显示一个调试控制面板。您可以通过抓住左侧的点在屏幕上移动它。

14.C/C++配置
如果要对C / C ++扩展进行更多控制,可以创建一个c_cpp_properties.json文件,该文件将允许您更改设置,例如编译器的路径,包含路径,C ++标准(默认为C ++ 17)等。

您可以从命令面板(Ctrl + Shift + P)编辑配置(UI)通过运行命令C/C++: 编辑配置(UI) C/C++: Edit configurations(UI)
C/C++: 编辑配置(UI).png
这将打开C/ C++配置页面。当您在此处进行更改时,VS Code会将其写入到文件夹中称为c_cpp_properties.json.vscode文件中。
C/C++配置页面.png
Visual Studio Code将这些设置放在中.vscode\c_cpp_properties.json。如果直接打开该文件,则它应如下所示:

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

仅当程序包含不在工作空间或标准库路径中的头文件时,才需要添加到包含路径数组设置中。
15.编译路径
compilerPath设置是您配置中的重要设置。该扩展使用它来推断C ++标准库头文件的路径。当扩展知道在哪里可以找到那些文件时,它可以提供有用的功能,例如智能补全和转到定义导航。
C/C++扩展尝试compilerPath根据其在系统上找到的内容来使用默认的编译器位置进行填充。该扩展在几个常见的编译器位置中查找。
compilerPath搜索顺序是:
首先检查Microsoft Visual C ++编译器
然后在Windows Subsystem for Linux(WSL)上寻找g ++
然后用g ++编写Mingw-w64。
如果安装了Visual Studio或WSL,则可能需要进行更改compilerPath以匹配项目的首选编译器。例如,如果使用Win32线程和SEH异常处理选项在C:\mingw64下安装Mingw-w64版本8.1.0,则路径如下所示:C:\\mingw64\\bin\\g++.exe