Windows10的MinGW安装和VS Code配置C/C++编译环境

1. MinGW下载安装

首先需要说明的是VS Code是一个编辑器 ,而不是编译器**。**‌ 编辑器和编译器是有很明显的区别

1.1 编辑器和编译器区别

编辑器‌是一种用于编写和编辑文本的应用软件,主要用于编写程序的源代码。编辑器提供基本的文本编辑功能,如增删改查、使用各种命令和快捷键等。‌你用记事本编写源程序也行,用Notepad++编辑源代码也行,用SourceInsight编辑也行,但你编完了没啥用,因为编译工具链生成不了可执行的文件。

编译器‌是一种将高级编程语言翻译成机器语言或目标代码的程序。编译器的核心功能是将源代码转换为机器能理解的指令,通常包括预处理、编译、链接等步骤。‌比如开发STM32单片机程序用Keil MDK,在Keil上编完可以执行编译链接下载将程序烧录到单片机上;开发Arduino代码用Arduino IDE也可以将编好的Arduino代码烧录到Arduino UNO开发板上,再比如开发TI芯片的CC25XX系列单片机,需要用IAR编译平台。

1.2 为啥需要安装MinGW

VS Code只是一个编辑器和扩展支持集成开发环境(IDE),但它本身并不包含编译器。所以想用VS Code编译C或者C++的程序需要自己手动配置编译环境, MinGW是GCC的windows版本,能够使用GCC的命令在windows环境下编译C/C++代码,如果你接触过Linux的驱动和应用,肯定对GCC编译链不陌生。

GCC(GNU Compiler Collection,GNU编译器套件)是一个开源的、跨平台的编译器套件,支持多种编程语言和目标架构,包括C、‌C++、‌Objective-C、‌Fortran、‌Ada、‌Go等多种语言‌。GCC的主要功能是将源代码编译成机器代码,通常生成可执行文件或库文件。

1.3 安装MinGW

接下来按步骤的展示如何下载和安装MinGW,首先打开其官网链接:

https://www.mingw-w64.org/

然后点左侧的Dowloads

然后看右侧的MinGW-W64-builds,然后看有个github链接,很多教程上并没有这样写,因为MinGW已经把安装包放到Github上了,他们写的还是以前的查找安装包的方式。

打开后可以看到当前的最新版本是14.2.0,然后我的电脑是windows10 64位的操作系统,就选X86_64的就行(现在好像很少见32位的操作系统了吧)。然后点击一下就会自动下载,受限于github的网络,如果没有VPN加速会下载的很慢,所以我把这个版本的安装包链接放在下面,有需要的可以自行下载:

当然你也可以点击Tags切换版本,可以查看和下载历史版本

下载好MinGW安装包后是个压缩包,解压缩就可以了,解压缩后的内容如下,重点关注bin文件夹就行。

然后需要配置你自己电脑的环境变量,依次点击鼠标右键此电脑-->属性-->在查找设置中输入:高级环境设置,然后打开如下图所示,查看高级,然后点击环境变量

系统变量中找到Path变量,然后按下图操作

然后把刚刚下载的MinGW安装包的bin文件夹的路径复制进去,然后点确定,一定要是bin文件夹那一级,比如我的是:H:\minGW\x86_64-14.2.0-release-posix-seh-msvcrt-rt_v12-rev0\mingw64\bin。如下图所示

1.4 验证安装是否成功

电脑键盘按下win图标按键+R,会弹出来搜索框,输入:cmd

然后输入gcc -v,,如果出现了gcc version 14.2.0就说明MinGW安装成功了。

2. VS Code环境配置

2.1 安装C/C++依赖

VS Code安装很简单,参考其他教程即可,安装好VS Code后打开,按下图的四个步骤操作,分别安装C/C++扩展包和C/C++运行包。安装成功后一定要重启VS Code !!!

2.2 配置C/C++的编译环境

首先在除了C盘外的任何一个盘里创建一文件夹,以后写的C/C++代码就放在这里。比如我的如下图:

然后打开VS Code,选择打开文件夹(Open Folder),打开之后选择刚刚新建的Ctest文件夹,出现如下界面

然后在VSCODE_202410(你自己起啥名随便)这个名字后面点一个图标新建一个文件夹,起名为 .vscode 注意:前面的点也要打进去!!!

然后在这个新建的.vscode文件夹中新建分别四个文件,这个时候就要鼠标右键点到.vscode上,会出现一个下拉框,点新建文件。而不是在VSCODE_202410后面点新建文件!!!

第一个文件名称为:c_cpp_properties.json 如下所示,"H:/minGW/x86_64-14.2.0-release-posix-seh-msvcrt-rt_v12-rev0/mingw64/bin/g++.exe",这一句替换成你自己的安装目录然后加上g++.exe,我的是H:/minGW/x86_64-14.2.0-release-posix-seh-msvcrt-rt_v12-rev0/mingw64/bin,
注意:从你的MinGW中的bin文件夹路径复制下来后,所有都是反斜杠,一定要把它改成斜杠!!!
因为放在双引号里,以反斜杠开头系统会认为是转义字符,而不是一个路径。

cpp 复制代码
{
    "configurations": [
      {
        "name": "Win64",
        "includePath": ["${workspaceFolder}/**"],
        "defines": ["_DEBUG", "UNICODE", "_UNICODE"],
        "windowsSdkVersion": "10.0.18362.0",
        "compilerPath": "H:/minGW/x86_64-14.2.0-release-posix-seh-msvcrt-rt_v12-rev0/mingw64/bin/g++.exe",
        "cStandard": "c17",
        "cppStandard": "c++17",
        "intelliSenseMode": "gcc-x64"
      }
    ],
    "version": 4
  }
  

第二个文件名称为:launch.json

同样也要记得替换路径!!!

java 复制代码
{
    "version": "0.2.0",
    "configurations": [
      {
        "name": "(gdb) Launch", 
        "type": "cppdbg", 
        "request": "launch", 
        "program": "${fileDirname}\\${fileBasenameNoExtension}.exe", 
        "args": [], 
        "stopAtEntry": false,
        "cwd": "${workspaceRoot}",
        "environment": [],
        "externalConsole": true, 
        "MIMode": "gdb",
        "miDebuggerPath": "H:/minGW/x86_64-14.2.0-release-posix-seh-msvcrt-rt_v12-rev0/mingw64/bin/g++.exe",
        "preLaunchTask": "g++",
        "setupCommands": [
          {
            "description": "Enable pretty-printing for gdb",
            "text": "-enable-pretty-printing",
            "ignoreFailures": true
          }
        ]
      }
    ]
  }
  

第三个文件名称为:settings.json

这个文件内容没有需要替换的

cpp 复制代码
{
  "files.associations": {
    "*.py": "python",
    "iostream": "cpp",
    "*.tcc": "cpp",
    "string": "cpp",
    "unordered_map": "cpp",
    "vector": "cpp",
    "ostream": "cpp",
    "new": "cpp",
    "typeinfo": "cpp",
    "deque": "cpp",
    "initializer_list": "cpp",
    "iosfwd": "cpp",
    "fstream": "cpp",
    "sstream": "cpp",
    "map": "c",
    "stdio.h": "c",
    "algorithm": "cpp",
    "atomic": "cpp",
    "bit": "cpp",
    "cctype": "cpp",
    "clocale": "cpp",
    "cmath": "cpp",
    "compare": "cpp",
    "concepts": "cpp",
    "cstddef": "cpp",
    "cstdint": "cpp",
    "cstdio": "cpp",
    "cstdlib": "cpp",
    "cstring": "cpp",
    "ctime": "cpp",
    "cwchar": "cpp",
    "exception": "cpp",
    "ios": "cpp",
    "istream": "cpp",
    "iterator": "cpp",
    "limits": "cpp",
    "memory": "cpp",
    "random": "cpp",
    "set": "cpp",
    "stack": "cpp",
    "stdexcept": "cpp",
    "streambuf": "cpp",
    "system_error": "cpp",
    "tuple": "cpp",
    "type_traits": "cpp",
    "utility": "cpp",
    "xfacet": "cpp",
    "xiosbase": "cpp",
    "xlocale": "cpp",
    "xlocinfo": "cpp",
    "xlocnum": "cpp",
    "xmemory": "cpp",
    "xstddef": "cpp",
    "xstring": "cpp",
    "xtr1common": "cpp",
    "xtree": "cpp",
    "xutility": "cpp",
    "stdlib.h": "c",
    "string.h": "c"
  },
  "editor.suggest.snippetsPreventQuickSuggestions": false,
  "aiXcoder.showTrayIcon": true
}

第四个文件名称为:tasks.json

这个文件内容也没有需要替换的

cpp 复制代码
{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "g++",
      "command": "g++",
      "args": [
        "-g",
        "${file}",
        "-o",
        "${fileDirname}/${fileBasenameNoExtension}.exe"
      ],
      "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
      }
    }
  ]
}

2.3 测试能否成功编译C/C++代码

接下来在VSCODE_202410新建一个文件夹,名字随便起,我的就叫Ctest,保持和.vscode同级,以后的C/C++代码就都放在这里编写和编译。

新建完成Ctest文件夹后,就可以在该文件夹中新建C/C++源代码文件了,点击Ctest右键,新建文件test.cpp。注意C文件的源文件是.c,C++文件的源文件是.cpp。

cpp 复制代码
#include <iostream>

using namespace std;

int main( )
{
    cout << "晚上好 胖虎" << endl;
    cout << "今天是2024年10月9日" << endl;
    cout << "现在已经晚上十一点多了,该睡觉了!" << endl;
    return 0;
}

代码运行结果如下,此时说明可以完美运行C++程序,编译环境配置完成。

2.4 多个C文件同时编译的配置问题

可以参考这篇博客,我懒得写了

https://blog.csdn.net/weixin_43728814/article/details/120812658?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-120812658-blog-140999908.235%5Ev43%5Epc_blog_bottom_relevance_base7&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-120812658-blog-140999908.235%5Ev43%5Epc_blog_bottom_relevance_base7&utm_relevant_index=1https://blog.csdn.net/weixin_43728814/article/details/120812658?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-120812658-blog-140999908.235%5Ev43%5Epc_blog_bottom_relevance_base7&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-120812658-blog-140999908.235%5Ev43%5Epc_blog_bottom_relevance_base7&utm_relevant_index=1

相关推荐
远望清一色16 分钟前
基于MATLAB的实现垃圾分类Matlab源码
开发语言·matlab
confiself25 分钟前
大模型系列——LLAMA-O1 复刻代码解读
java·开发语言
凌云行者35 分钟前
OpenGL入门005——使用Shader类管理着色器
c++·cmake·opengl
XiaoLeisj37 分钟前
【JavaEE初阶 — 多线程】Thread类的方法&线程生命周期
java·开发语言·java-ee
凌云行者38 分钟前
OpenGL入门006——着色器在纹理混合中的应用
c++·cmake·opengl
杜杜的man40 分钟前
【go从零单排】go中的结构体struct和method
开发语言·后端·golang
幼儿园老大*41 分钟前
走进 Go 语言基础语法
开发语言·后端·学习·golang·go
半桶水专家42 分钟前
go语言中package详解
开发语言·golang·xcode
llllinuuu43 分钟前
Go语言结构体、方法与接口
开发语言·后端·golang
cookies_s_s43 分钟前
Golang--协程和管道
开发语言·后端·golang