Windows 系统安装 MinGW 和配置 CLion

前言

Windows 平台下的类 Unix 工具链或开发环境有:MinGW、Cygwin、MSYS2、WSL,主要用于提供 GCC 编译器,让开发者在 Windows 平台下使用 Unix/Linux 风格的开发体验(如 bashmakegcc 等),但它们的兼容性、运行环境、目标用途各不相同。

工具链介绍

工具链的分类

MinGW

MinGW(Minimalist GNU for Windows)适用于只想编译 Windows 原生程序(不模拟 POSIX 层)。

  • 目标:

    • 使用 GCC 编译 Windows 原生应用(不依赖 POSIX 层)
  • 特点:

    • 编译输出的是纯正 Windows 程序(.exe),不依赖额外 DLL(或仅依赖系统默认的 msvcrt
    • 支持调用 WinAPI(如 MessageBoxCreateWindow),比如开发桌面程序、游戏等
    • 不支持很多 POSIX 特性,如 forkpipe(除非模拟实现)
  • 分支:

    • MinGW 分支:原版,已停止维护
    • MinGW-w64 分支:支持 64 位和现代 C++,现在主流使用这个分支
  • 适用场景:

    • 开发原生 Windows 应用
    • 希望使用 GCC 而非 MSVC 进行编译
    • 不需要 Unix 环境仿真模拟的开发者

Cygwin

Cygwin 适用于希望在 Windows 上模拟 Linux 的行为和工具。

  • 目标:

    • 在 Windows 上模拟一个完整的 Linux 用户空间
  • 特点:

    • 提供接近 POSIX 的开发环境
    • 提供大量 Linux API 支持(如 forkpipesymlinks
    • 编译出来的程序依赖 cygwin1.dll
    • 类似 WSL(但不是虚拟化,而是使用 API 转译层)
  • 优点:

    • 工具丰富,接近 Linux 行为,能运行和编译大部分 Linux 程序
    • 可运行很多 GNU/Linux 工具,如 bashvimrsynctmux
    • 在某些场景下是 WSL 的替代方案(不需要管理员权限)
  • 缺点:

    • 程序不是真正的 Windows 原生应用,不能脱离 Cygwin 环境运行
    • 程序性能比 MinGW 差(因为模拟了 POSIX 层)
    • 程序性能不如 WSL,因为是通过 DLL 模拟系统调用
  • 适用场景:

    • 希望在 Windows 上运行 Linux 脚本、工具
    • 开发 POSIX 兼容软件,比如老项目基于 POSIX 构建,需要复用工具链

MSYS2

MSYS2(Minimal SYStem 2)适用于想要最好用的编译构建环境,支持 bash + GCC + 输出 Windows 原生 EXE 程序,开发者首选工具链。

  • 目标:

    • 结合了 Cygwin 的灵活性与 MinGW 的本地构建能力,适合现代 C++/C 开发
  • 特点:

    • 提供一个轻量的类 Unix 环境(bashmakevim
    • 内置包管理器 pacman,方便安装 GCC、CMake 库等
    • 支持多套 GCC 工具链:
      • MSYS GCC:用于构建 MSYS2 自身工具(依赖 msys2.dll,不推荐用于最终程序)
      • MinGW-w64 GCC:用于生成原生 Windows 可执行程序
  • 优点:

    • 易用的包管理器(pacman
    • 能编译输出完全不依赖 MSYS2 的 EXE 程序(使用 MinGW-w64 GCC 编译器)
    • 适合跨平台项目(如编译 Qt、FFmpeg、SDL)
  • 缺点:

    • 初学者可能搞不清哪套 GCC 用于什么用途(需要小心选择编译器)
  • 适用场景:

    • 编译跨平台库 / GUI 框架(比 Cygwin 更灵活)
    • 希望用 bash + GCC 进行现代 C/C++ 开发的程序员
    • 希望有方便的 Linux 开发环境 + 可以输出原生 Windows 可执行文件

WSL

WSL(Windows Subsystem for Linux)适用于开发 / 学习 / 运行真实 Linux 环境。

  • 目标:

    • 在 Windows 上运行真正的 Linux 内核用户空间
  • 特点:

    • 是 Windows 原生支持的虚拟 Linux 子系统(WSL2 使用轻量 VM)
    • 可以运行 aptgccbashsshdockerpython
    • 文件系统与 Windows 互通,可在 VSCode、IDE 里无缝开发
  • 优点:

    • 真正的 Linux 环境,不需要模拟 POSIX(对比 Cygwin)
    • 开发体验几乎与 Ubuntu/Linux 原生一致
    • 支持图形界面(WSLg)和 GPU 加速(WSL2)
  • 缺点:

    • 编译出的程序默认是 Linux 可执行文件(.out
    • 不能直接生成 Windows 原生 EXE 程序(除非使用交叉编译工具链)
    • 启动和文件访问略慢于 MSYS2
  • 版本:

    • WSL1
      • 不使用虚拟化
      • 通过 Windows 系统调用(syscall)转译来模拟 Linux 内核行为(速度快,兼容性差)
    • WSL2
      • 使用虚拟化(基于 Hyper-V 的轻量虚拟化平台)
      • 启动速度比 WSL1 稍慢,但仍比传统虚拟机快
      • 基于真正的 Linux 内核,运行在轻量级的 Hyper-V 虚拟机中,兼容性和性能都更好
  • 适用场景:

    • 希望在 Windows 上开发 Linux 软件 / 库 / 服务
    • 学习 Linux 命令、Docker、Python、C++ 等环境
    • 远程连接 Linux 主机、容器、嵌入式开发模拟等

工具链的选择建议

需求推荐
希望编译 Windows GUI 程序 / 控制台工具 MinGW-w64、MSYS2 + MinGW
希望用 bash / make / autotools 搭环境 MSYS2
只希望跑一些 Linux 工具 / 脚本 Cygwin、WSL
希望编译 Qt / SDL / CMake 项目 MSYS2(带 pacman 的 MinGW 构建链)

工具链的区别总览

特性 MinGWCygwinMSYS2WSL
目标生成原生 Windows 程序在 Windows 上运行类 Linux 程序兼顾两者,现代开发环境在 Windows 上运行真实 Linux 环境
POSIX 支持❌ 基本没有✅ 完整 POSIX 环境模拟✅ 支持部分 POSIX,但不模拟完整内核✅ 原生 POSIX(基于真实 Linux 内核)
DLL 依赖轻量(只依赖 msvcrt.dll)依赖 cygwin1.dllMSYS 工具依赖 msys-2.0.dll,编译结果可用 MinGW 生成原生程序❌ 无额外 DLL,运行在真实 Linux 子系统环境
GCC 支持✅ 原生 GCC(目标是 Windows)✅ GCC(目标是 Cygwin 平台)✅ 多个 GCC(支持 MinGW32/64)✅ 原生 Linux GCC,默认编译为 Linux 可执行文件
包管理❌ 无❌ 有 setup.exe,但不好用✅ 使用 pacman,类似 Arch Linux✅ 使用原生 Linux 包管理器,如 aptdnfapk
适合人群希望编译 Windows 应用的 C/C++ 程序员需要完整 Linux 工具链的用户希望用 bash + gcc + 快速构建原生程序的现代开发者希望开发 Linux 程序、使用 Linux 工具链或学习 Linux 的用户
可移植性✅ 生成的程序能独立运行❌ 依赖 cygwin DLL✅ 使用 MinGW 编译的结果可独立运行❌ 默认编译结果只能在 Linux 环境运行,需交叉编译才能支持 Windows 平台

MinGW 介绍

MinGW 的简介

MinGW 是 Minimalist GNU on Windows 的缩写。它是一个可自由使用和自由发布的 Windows 特定头文件和使用 GNU 工具集导入库的集合,允许开发者在 Linux 和 Windows 平台生成本地的 Windows 程序而不需要第三方 C 运行时库(C Runtime)。MinGW 实际上是将经典的开源 C 语言编译器 GCC 移植到了 Windows 平台下,并且包含了 Win32API 和 MSYS,因此可以将源代码编译生成 Windows 下的可执行程序,又能如同在 Linux 平台下时,使用一些 Windows 不具备的开发工具。简而言之,MinGW 就是 GCC 的 Windows 版本 。

跨平台编译工具

常见的 C/C++ 跨平台编译工具有:MinGW、Cygwin、WSL 等。

MinGW 的优势

  • MinGW 支持最新的 C 语言 标准
  • MinGW 是开源软件,可以免费使用
  • MinGW 由一个活跃的开源社区在持续维护,因此不会过时
  • MinGW 使用 Windows 的 C 语言运行库,因此编译出的程序不需要第三方 DLL ,可以直接在 Windows 下运行
  • 那些著名的开源 IDE 实际只是将 MinGW 封装了起来,使它拥有友好的图形化界面,简化了操作,但内部核心仍然是 MinGW

MinGW 是稳定可靠的、持续更新的 C/C++ 编译器,使用它可以免去很多麻烦,不用担心跟不上时代,也不用担心编译器本身有严重漏洞,可以放心的去编写程序。

MinGW 安装管理器

下载 MinGW 安装管理器

浏览器访问 这里,下载最新版本的 MinGW 安装管理器 mingw-get-setup.exe

安装 MinGW 安装管理器

  1. 使用系统管理员权限运行 mingw-get-setup.exe

cplus-plus-mingw-1

  1. 选择 MinGW 安装管理器的安装位置

cplus-plus-mingw-2

  1. 开始下载 MinGW 安装管理器,一般来说并不会花费太长时间,在数分钟内即可完成

cplus-plus-mingw-3

MinGW 组件安装

MinGW 安装管理器安装完成后,会在桌面创建一个快捷方式,以后只要双击它就可以启动 MinGW 安装管理器,这样就可以很方便地管理 MinGW 已安装的组件,或者添加安装新的组件

界面介绍

一般来说,只需要一些基础组件就可以满足编译 C/C++ 程序的需求,所以选择左侧目录中的第一项 Basic Setup 即可,之后就可以在右侧选择需要的组件了

cplus-plus-mingw-4

勾选组件

在组件上单击鼠标右键,然后在弹出的右键菜单中单击 Mark for Installation 选项,即可将组件进行标记。在之后的操作完成后,管理器将会自动安装被标记了的组件

cplus-plus-mingw-5

选择组件

如果只是为了编译 C/C++ 程序,那么只需安装 mingw-developer-toolkitmingw32-basemingw32-gcc-g++msys-base 这 4 个基础组件即可

cplus-plus-mingw-6

应用更改

在上述所需的 4 个基础组件都已勾选完成后,单击菜单栏上的 Installation 选项,并在弹出的菜单中单击 Apply Changes 选项

cplus-plus-mingw-7

确认安装

在弹出的确认窗口里,直接单击 Apply 按钮,之后安装管理器就会真正地开始下载和安装 MinGW 了

cplus-plus-mingw-8

MinGW 安装管理器会一边下载一边安装 MinGW,这一过程可能会花费很长的时间。由于 MinGW 安装管理器连接的是国外的服务器,这会导致下载速度缓慢,所以需要耐心地等待一段时间

cplus-plus-mingw-9

安装完成

cplus-plus-mingw-10

检查更新

cplus-plus-mingw-11

已安装组件

cplus-plus-mingw-12

MinGW 环境变量配置

安装目录结构

MinGW 安装后,本地磁盘的目录结构如下,默认安装路径是 C:\MinGW\

cplus-plus-mingw-13

添加环境变量

创建新的环境变量 MINGW_HOME,用于指定的 MinGW 安装路径

cplus-plus-mingw-14

将 MinGW 安装目录下 bin 目录的路径添加到系统的 Path 环境变量中

cplus-plus-mingw-15

验证环境变量

在打开的命令提示符窗口中,输入 gcc -v ,然后按回车键(Enter),若控制台正确输出 GCC 的版本信息,则说明已正确配置 MinGW 的环境变量

cplus-plus-mingw-16

CLion 配置 MinGW

CLion 的安装可以参考本站教程:JetBrains-CLion 永久激活

创建 CMake 项目

在 CLion 中创建 CMake 项目,若是 C++ 项目,则选择 C++ Executable,若是 C 语言项目,则选择 C Executable,然后选择项目路径即可

cplus-plus-mingw-17

配置工具链

进入 CLion 工具链的配置界面,找到 Toolchains 配置选项,点击左侧的 + 号,环境选择 MinGW

cplus-plus-mingw-18

选择 MinGW 的安装路径,一般情况下,设置好 MinGW 的安装路径后,CLion 会自动探测 CMakeMakeC CompilerC++ Compiler 对应的可执行程序,但速度略慢,可等待探测完成,也可手动选择可执行文件

cplus-plus-mingw-19

编译程序

选中需要编译和运行的 C/C++ 源文件,然后点击 绿色箭头,这就可以编译和运行 C/C++ 程序了,程序成功运行后,会在 CLion 的输出窗口打印运行结果

cplus-plus-mingw-20

参考博客