在vscode中使用Mingw-w64搭建c++环境

该文章翻译自官方教程(有部分修改)


这篇教程教你使用Mingw-w64中的GCC C++编译器(g++)和GDB调试器创建在windows上运行的程序。

配置完vscode,你将编译并调试一个简单的程序来熟悉vscode的界面。读完这篇教程你将能够自己创建并配置你的工作区、在vsocde的文档中进一步探索它的众多特性。不过本教程不会教你有关GCC、Mingw-w64或者c++的知识,因为这些东西在网上有很多可用的优秀资料。

如果你有任何问题,请随时在vscode文档仓库提问。

准备

要想配置成功必须先完成以下步骤:

  1. 安装vscode
  2. 安装vscode c++扩展
  3. 安装Mingw-w64(安装路径文件不能带有空格,且不要安装在默认路径C:/Program Files/下),本教程中默认它安装在C:\Mingw-w64
  4. 将Mingw-w64的bin文件添加到环境变量。
    a.在windows设置中搜索编辑账户的环境变量
    b.选中Path,点击编辑
    c.点击新建,添加Mingw-w64的路径到环境变量中。实际路径取决于你安装的Mingw-w64版本。例如c:\mingw-w64\x86_64-8.1.0-win32-seh-rt_v6-rev0\mingw64\bin
    d.点击确定。已经打开的cmd窗口要重启才能让新路径生效。

创建一个工作区

  1. cmd中创建名为projects的文件夹,用来放你的vscode工程。然后创建一个子文件夹,名为helloworld。定位到这个文件夹,使用vscode打开。命令行如下:

    mkdir projects
    cd projects
    mkdir helloworld
    cd helloworld
    code .

    code .命令用于在vscode中打开当前文件夹,并将这个文件夹作为当前工作区。在编译调试代码之前,得先为vscode配置Mingw-w64。继续完成下方配置步骤后.vscode子文件夹中将存在这些文件:

    • c_cpp_properties.json (编译器路径和智能提示设置)
    • tasks.json(编译设置)
    • launch.json(调试设置)

配置编译器路径

  1. Ctrl+Shift+P打开命令面板,它长这样:command-palette.png
  2. 输入C/C++然后在底下的列表中选择Edit Configurations (UI)。vscode将会把你的更改写入到.vscode下的c_cpp_properties.json中。intellisense-configurations-mingw.png
  3. 找到Complier path设置。vscode会用系统上查找到的编译器路径来填写:优先查找MSVC编译器,其次查找WSL中的g++,最后查找Mingw-w64里的g++。如果你装了VisualStudio或者WSL,那你就得改一下Complier path的路径了。假设你在C:\mingw-w64下装了版本为8.1.0的Mingw-w64(使用Win32线程和结构化异常处理),那么修改路径为C:\mingw-w64\x86_64-8.1.0-win32-seh-rt_v6-rev0\mingw64\bin\g++.exe。这个路径随着安装Mingw-w64时选择的选项的不同而变化。

    Complier path在配置文件中尤为重要。vscode插件通过它推断c++标准库的头文件路径,来为你在编写代码时提供许多有用的信息。这叫做IntelliSense(智能提示),在稍后的例子中你将见到它。

  4. 设置IntelliSense modegcc-x64

    如果你的程序包含的头文件不在工作区或者标准头文件库的路径中,将这个头文件的路径添加到Inlucde path即可。
    vscode将这些设置保存在.vscode/c_cpp_properties.json。如果你直接打开它,你会看到类似如下内容(实际内容取决于你的Mingw-w64路径):

        {
          "configurations": [
            {
              "name": "Win32",
              "includePath": ["${workspaceFolder}/**", "${vcpkgRoot}/x86-windows/include"],
              "defines": ["_DEBUG", "UNICODE", "_UNICODE"],
              "windowsSdkVersion": "10.0.17763.0",
              "compilerPath": "C:\\mingw-w64\\x86_64-8.1.0-win32-seh-rt_v6-rev0\\mingw64\\bin\\g++.exe",
              "cStandard": "c11",
              "cppStandard": "c++17",
              "intelliSenseMode": "${default}"
            }
          ],
          "version": 4
        }

创建编译任务

接下来,创建一个tasks.json文件来告诉vsocde如何编译程序。这个task调用g++编译器根据源代码生成可执行文件。

  1. 菜单选择View > Command Palette,键入“task”,选择Tasks: Configure Default Build Task。在下拉列表中选择Create tasks.json file from template,然后选择Others。vscode将生成tasks.json并在编辑区打开。
  2. 使用以下片段替换整个文件的内容:

        {
          "version": "2.0.0",
          "tasks": [
            {
              "label": "build hello world",
              "type": "shell",
              "command": "g++",
              "args": ["-g", "-o", "helloworld", "helloworld.cpp"],
              "group": {
                "kind": "build",
                "isDefault": true
              }
            }
          ]
        }

    command设置声明了要运行的程序(这里是g++.exe),args定义要传递给g++的命令参数,这些参数必须按照编译器期望的顺序来声明。
    label的值作为任务名称会显示在vscode的命令面版中,任意值均可。group下的isDefault决定这个任务在按下Ctrl+Shift+B时是否作为默认选项直接执行。这个属性只是为了方便一些,如果设为false,vscode会弹出下拉框让你选择一个任务来执行。

配置调试设置

现在我们配置按下F5时vscode启动GDB所需要的配置文件。

  1. 在命令面板中键入“launch”并下拉选择Debug:Open launch.json,然后选择GDB/LLDB
  2. program是你要调试的可执行文件路径,和你在tasks.jsonargs定义生成的可执行文件对应。调整miDebuggerPath的值为Mingw-w64中的gdb.exe的路径。
  3. 默认的,当stopAtEntry为true时,C++扩展会在main函数的第一行加上断点。设置为false则忽略这个断点。
  4. 设置externalConsole为true时,程序输出显示在下方的集成终端中。

    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": "${workspaceFolder}/helloworld.exe",
              "args": [],
              "stopAtEntry": true,
              "cwd": "${workspaceFolder}",
              "environment": [],
              "externalConsole": true,
              "MIMode": "gdb",
              "miDebuggerPath": "C:\\mingw-w64\\x86_64-8.1.0-win32-seh-rt_v6-rev0\\mingw64\\bin\\gdb.exe",
              "setupCommands": [
                {
                  "description": "Enable pretty-printing for gdb",
                  "text": "-enable-pretty-printing",
                  "ignoreFailures": true
                }
              ]
            }
          ]
        }

现在vscode配置Mingw-w64完成。配置仅对当前工作区有效,想要在另一个工作区使用这些配置,把这些Json文件复制到另一个工作区的.vscode子文件夹下,并修改配置中的源文件名和可执行文件名即可。

你可能感兴趣的:(c++,mingw-w64)