• Visual Studio 2022使用MinGW来编译调试C/C++程序



    Visual Studio的新版本已经可以像VSCode一样创建CMake项目了,但是默认的情况下是使用的Visual Studio编译器及调试器不包括MinGW中的工具集,参见下面的默认可选工具集:

    在这里插入图片描述

    本文就以实例来简单介绍一下VS2022中如何使用MinGW来编译、调试C/C++程序。
    本文链接地址:https://blog.csdn.net/witton/article/details/126211289?spm=1001.2014.3001.5501

    一、创建项目

    首先,创建一个新项目:

    在这里插入图片描述

    然后,选择CMake项目:

    在这里插入图片描述

    填写项目名称,比如test

    在这里插入图片描述

    项目创建好后如下所示,由于笔者并未安装VS的Windows C/C++开发工具,也就没有VS的C/C++编译、调试器,所以会报错。

    在这里插入图片描述

    二、配置CMake

    在VS2022中CMake的配置有两个文件,一个是“CMakePresets.json”,另一个是“CMakeSettings.json”,在VS的“工具”/“选项”/“CMake”/“常规”中可以进行设置使用哪个文件来进行CMake配置,如下图所示:

    在这里插入图片描述

    默认是如果有“CMakePresets.json”则使用“CMakePresets.json”,否则使用“CMakeSettings.json”。
    下面就分别介绍如何使用这两个文件来配置CMake,二选一即可。

    1.修改“CMakePresets.json”预设编译工具集

    新建项目后,默认是生成了“CMakePresets.json”,打开“CMakePresets.json”,可以看到默认的编译是cl.exe

    在这里插入图片描述

    为了使用MinGW中编译器,将之改为gcc.exe和g++.exe(必须在PATH路径中可以找到),如下图所示:

    在这里插入图片描述

    此时即可正常编译了:

    在这里插入图片描述

    但是此时的智能感知识别并未正常工作,无法跳转到定义,此时需要设置智能感知模式(intelliSenseMode),打开“CMakePresets.json”,在cacheVariables后添加:

    "vendor": {
              "microsoft.com/VisualStudioSettings/CMake/1.0": {
                "intelliSenseMode": "linux-gcc-x86"
              }
            }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    即:

    "cacheVariables": {
              "CMAKE_C_COMPILER": "gcc.exe",
              "CMAKE_CXX_COMPILER": "g++.exe"
            },
            "vendor": {
              "microsoft.com/VisualStudioSettings/CMake/1.0": {
                "intelliSenseMode": "linux-gcc-x86"
              }
            },
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    如果是64位程序,则将"linux-gcc-x86"改为"linux-gcc-x64"。

    2.使用CMake设置编辑器来配置CMake

    新建的项目,默认是生成的“CMakePresets.json”预设文件,先将之删除掉或者在VS选项中设置CMake为“从不使用CMakePresets.json”,然后在项目中选择“test的CMake设置”,此时项目中会创建一个CMakeSettings.json的文件

    在这里插入图片描述

    双击即可打开CMake的设置编辑器,如下图所示:

    在这里插入图片描述

    此时工具集中是默认可用的工具集,可以看到并没有MinGW。点击右边的“编辑JSON”,即可看到JSON格式的配置文件:

    在这里插入图片描述

    删除"inheritEnvironments"所在行,并添加:

    "variables": [
            {
              "name": "CMAKE_C_COMPILER",
              "value": "gcc",
              "type": "FILEPATH"
            },
            {
              "name": "CMAKE_CXX_COMPILER",
              "value": "g++",
              "type": "FILEPATH"
            }
          ],
          "intelliSenseMode": "linux-gcc-x64"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    或者直接在配置中选中“x64-Debug"删除掉

    在这里插入图片描述

    然后再添加MinGW配置
    在这里插入图片描述

    此时工具集中可以看到MinGW了:

    在这里插入图片描述

    在下面的CMake变量中可以看到重新定义了CMAKE_C_COMPILER和CMAKE_CXX_COMPILER变量:

    在这里插入图片描述

    如果没有定义env.BIN_ROOT变量则会找不到gcc和g++,可以直接使用PATH变量,所以把CMAKE_C_COMPILER改为gcc,CMAKE_CXX_COMPILER改为g++即可:

    在这里插入图片描述

    强烈推荐使用此方式来设置为MinGW,它会自动设置intelliSenseMode为"linux-gcc-x64":

    在这里插入图片描述

    不管是使用CMake的预设文件“CMakePresets.json”还是“CMakeSettings.json”都只是设置了编译器为MinGW中的gcc/g++,目前只能编译,不能使用gdb调试。

    三、配置调试

    想要调试,需要做如下设置,在“解决方案资源管理器”中的CMakeLists.txt文件上右键,在弹出的菜单中选择“添加调试配置”,如下图所示:

    在这里插入图片描述

    然后在弹出的“选择调试程序”对话框中选择“MinGW/Cygin(gdb)的C/C++启动”,如下图所示:

    在这里插入图片描述

    此时会创建一个launch.vs.json文件,如下图所示:

    在这里插入图片描述

    将"projectTarget"设置为编译的exe文件,这里为test.exe;把"miDebuggerPath"设置成"gdb.exe"(要求gdb.exe在PATH路径中);将gdb的反汇编格式设置为intel格式,如下所示:

    {
      "version": "0.2.1",
      "defaults": {},
      "configurations": [
        {
          "type": "cppdbg",
          "name": "CMakeLists.txt",
          "project": "CMakeLists.txt",
          "projectTarget": "test.exe",
          "cwd": "${workspaceRoot}",
          "program": "${debugInfo.target}",
          "MIMode": "gdb",
          "miDebuggerPath": "gdb.exe",
          "externalConsole": true,
          "setupCommands": [
            {
              "description": "为 gdb 启用整齐打印",
              "text": "-enable-pretty-printing",
              "ignoreFailures": true
            },
            {
              "description": "将反汇编风格设置为 Intel",
              "text": "-gdb-set disassembly-flavor intel",
              "ignoreFailures": true
            }
          ]
        }
      ]
    }
    
    • 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

    再把调试目标设置为“CMakeLists.txt”,

    在这里插入图片描述

    此时我们直接按F5键即可进行调试:

    在这里插入图片描述

    至此就可以畅快地在Visual Studio中使用MinGW开发调试C/C++程序了。

  • 相关阅读:
    kafka+ubuntu20.04+docker配置
    Rust区块琏开发——签名加密与私钥公钥
    软件测试<进阶篇-->测试分类>
    PMP 考试一定要报培训班吗?求靠谱培训机构,最好是自己考过的!
    【Java基础】23种设计模式介绍
    MySQL语句
    kafka消费者模式
    【稳定性】秘密武器--功能开关技术
    【密码学】RSA密码体制存在的问题
    EBI、DDD及其演变架构史
  • 原文地址:https://blog.csdn.net/witton/article/details/126211289