Windows 系统安装 MinGW 和配置 CLion
前言
Windows 平台下的类 Unix 工具链或开发环境有:MinGW、Cygwin、MSYS2、WSL,主要用于提供 GCC 编译器,让开发者在 Windows 平台下使用 Unix/Linux 风格的开发体验(如 bash
、make
、gcc
等),但它们的兼容性、运行环境、目标用途各不相同。
工具链介绍
工具链的分类
MinGW
MinGW(Minimalist GNU for Windows)适用于只想编译 Windows 原生程序(不模拟 POSIX 层)。
目标:
- 使用 GCC 编译 Windows 原生应用(不依赖 POSIX 层)
特点:
- 编译输出的是纯正 Windows 程序(
.exe
),不依赖额外 DLL(或仅依赖系统默认的msvcrt
) - 支持调用 WinAPI(如
MessageBox
,CreateWindow
),比如开发桌面程序、游戏等 - 不支持很多 POSIX 特性,如
fork
、pipe
(除非模拟实现)
- 编译输出的是纯正 Windows 程序(
分支:
MinGW
分支:原版,已停止维护MinGW-w64
分支:支持 64 位和现代 C++,现在主流使用这个分支
适用场景:
- 开发原生 Windows 应用
- 希望使用 GCC 而非 MSVC 进行编译
- 不需要 Unix 环境仿真模拟的开发者
Cygwin
Cygwin 适用于希望在 Windows 上模拟 Linux 的行为和工具。
目标:
- 在 Windows 上模拟一个完整的 Linux 用户空间
特点:
- 提供接近 POSIX 的开发环境
- 提供大量 Linux API 支持(如
fork
、pipe
、symlinks
) - 编译出来的程序依赖
cygwin1.dll
- 类似 WSL(但不是虚拟化,而是使用 API 转译层)
优点:
- 工具丰富,接近 Linux 行为,能运行和编译大部分 Linux 程序
- 可运行很多 GNU/Linux 工具,如
bash
、vim
、rsync
、tmux
- 在某些场景下是 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 环境(
bash
、make
、vim
) - 内置包管理器
pacman
,方便安装 GCC、CMake 库等 - 支持多套 GCC 工具链:
- MSYS GCC:用于构建 MSYS2 自身工具(依赖
msys2.dll
,不推荐用于最终程序) - MinGW-w64 GCC:用于生成原生 Windows 可执行程序
- MSYS GCC:用于构建 MSYS2 自身工具(依赖
- 提供一个轻量的类 Unix 环境(
优点:
- 易用的包管理器(
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)
- 可以运行
apt
、gcc
、bash
、ssh
、docker
、python
等 - 文件系统与 Windows 互通,可在 VSCode、IDE 里无缝开发
优点:
- 真正的 Linux 环境,不需要模拟 POSIX(对比 Cygwin)
- 开发体验几乎与 Ubuntu/Linux 原生一致
- 支持图形界面(WSLg)和 GPU 加速(WSL2)
缺点:
- 编译出的程序默认是 Linux 可执行文件(
.out
) - 不能直接生成 Windows 原生 EXE 程序(除非使用交叉编译工具链)
- 启动和文件访问略慢于 MSYS2
- 编译出的程序默认是 Linux 可执行文件(
版本:
- WSL1
- 不使用虚拟化
- 通过 Windows 系统调用(
syscall
)转译来模拟 Linux 内核行为(速度快,兼容性差)
- WSL2
- 使用虚拟化(基于 Hyper-V 的轻量虚拟化平台)
- 启动速度比 WSL1 稍慢,但仍比传统虚拟机快
- 基于真正的 Linux 内核,运行在轻量级的 Hyper-V 虚拟机中,兼容性和性能都更好
- WSL1
适用场景:
- 希望在 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 构建链) |
工具链的区别总览
特性 | MinGW | Cygwin | MSYS2 | WSL |
---|---|---|---|---|
目标 | 生成原生 Windows 程序 | 在 Windows 上运行类 Linux 程序 | 兼顾两者,现代开发环境 | 在 Windows 上运行真实 Linux 环境 |
POSIX 支持 | ❌ 基本没有 | ✅ 完整 POSIX 环境模拟 | ✅ 支持部分 POSIX,但不模拟完整内核 | ✅ 原生 POSIX(基于真实 Linux 内核) |
DLL 依赖 | 轻量(只依赖 msvcrt.dll) | 依赖 cygwin1.dll | MSYS 工具依赖 msys-2.0.dll ,编译结果可用 MinGW 生成原生程序 | ❌ 无额外 DLL,运行在真实 Linux 子系统环境 |
GCC 支持 | ✅ 原生 GCC(目标是 Windows) | ✅ GCC(目标是 Cygwin 平台) | ✅ 多个 GCC(支持 MinGW32/64) | ✅ 原生 Linux GCC,默认编译为 Linux 可执行文件 |
包管理 | ❌ 无 | ❌ 有 setup.exe ,但不好用 | ✅ 使用 pacman ,类似 Arch Linux | ✅ 使用原生 Linux 包管理器,如 apt 、dnf 、apk 等 |
适合人群 | 希望编译 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 安装管理器
- 使用系统管理员权限运行
mingw-get-setup.exe
- 选择 MinGW 安装管理器的安装位置
- 开始下载 MinGW 安装管理器,一般来说并不会花费太长时间,在数分钟内即可完成
MinGW 组件安装
MinGW 安装管理器安装完成后,会在桌面创建一个快捷方式,以后只要双击它就可以启动 MinGW 安装管理器,这样就可以很方便地管理 MinGW 已安装的组件,或者添加安装新的组件
界面介绍
一般来说,只需要一些基础组件就可以满足编译 C/C++ 程序的需求,所以选择左侧目录中的第一项 Basic Setup
即可,之后就可以在右侧选择需要的组件了
勾选组件
在组件上单击鼠标右键,然后在弹出的右键菜单中单击 Mark for Installation
选项,即可将组件进行标记。在之后的操作完成后,管理器将会自动安装被标记了的组件
选择组件
如果只是为了编译 C/C++ 程序,那么只需安装 mingw-developer-toolkit
、mingw32-base
、mingw32-gcc-g++
、msys-base
这 4 个基础组件即可
应用更改
在上述所需的 4 个基础组件都已勾选完成后,单击菜单栏上的 Installation
选项,并在弹出的菜单中单击 Apply Changes
选项
确认安装
在弹出的确认窗口里,直接单击 Apply
按钮,之后安装管理器就会真正地开始下载和安装 MinGW 了
MinGW 安装管理器会一边下载一边安装 MinGW,这一过程可能会花费很长的时间。由于 MinGW 安装管理器连接的是国外的服务器,这会导致下载速度缓慢,所以需要耐心地等待一段时间
安装完成
检查更新
已安装组件
MinGW 环境变量配置
安装目录结构
MinGW 安装后,本地磁盘的目录结构如下,默认安装路径是 C:\MinGW\
添加环境变量
创建新的环境变量 MINGW_HOME
,用于指定的 MinGW 安装路径
将 MinGW 安装目录下 bin
目录的路径添加到系统的 Path
环境变量中
验证环境变量
在打开的命令提示符窗口中,输入 gcc -v
,然后按回车键(Enter),若控制台正确输出 GCC 的版本信息,则说明已正确配置 MinGW 的环境变量
CLion 配置 MinGW
CLion 的安装可以参考本站教程:JetBrains-CLion 永久激活
创建 CMake 项目
在 CLion 中创建 CMake 项目,若是 C++ 项目,则选择 C++ Executable
,若是 C 语言项目,则选择 C Executable
,然后选择项目路径即可
配置工具链
进入 CLion 工具链的配置界面,找到 Toolchains
配置选项,点击左侧的 +
号,环境选择 MinGW
选择 MinGW 的安装路径,一般情况下,设置好 MinGW 的安装路径后,CLion 会自动探测 CMake
、Make
、C Compiler
和 C++ Compiler
对应的可执行程序,但速度略慢,可等待探测完成,也可手动选择可执行文件
编译程序
选中需要编译和运行的 C/C++ 源文件,然后点击 绿色箭头
,这就可以编译和运行 C/C++ 程序了,程序成功运行后,会在 CLion 的输出窗口打印运行结果