目录
- 一、MSYS2是什么
- 1.1 核心架构与组件
- 1.1.1 背景介绍
- 1.1.1.1 Cygwin
- 1.1.1.2 MinGW和Mingw-w64
- 1.1.1.3MSYS和MSYS2
- 1.1.2 技术基础
- 1.1.3 多环境支持
- 1.2 核心功能
- 1.2.1 类Unix开发环境
- 1.2.2 开发工具链
- 1.2.3 软件仓库与包管理
- 二、安装和配置
- 2.1 配置环境
- 2.1.1 UCRT64
- 2.1.2 MINGW64
- 三、MSYS2的功能
- 3.1 模拟Unix
- 3.2 文件系统
- 四、配置CMake开发环境
- 4.1.下载安装CMake
- 4.2.配置环境变量
- 4.3.配置vscode
- 4.4.构建CMake项目
- 4.5.结果展示
- 4.6调试
一、MSYS2是什么
MSYS2(Minimal SYStem 2)是一个专为Windows系统设计的轻量级类Unix开发环境,集成了软件包管理、编译工具链和命令行工具,旨在解决Windows平台开发中的跨平台兼容性问题。其核心目标是为开发者提供在Windows上高效运行Linux/Unix工具和编译原生Windows程序的能力。
1.1 核心架构与组件
1.1.1 背景介绍
1.1.1.1 Cygwin
Cygwin是运行于Windows平台的POSIX"子系统"”,提供了类Unix环境的工具和开发库,Cygwin将Unix程序编译为Windows本地代码,然后在Windows上运行。它提供了最完整的Linux/Unix环境,但相对于MSYS2和MinGW-w64,Cygwin的性能较差
1.1.1.2 MinGW和Mingw-w64
MinGW 的全称是:Minimalist GNU on Windows,它实际上是将Linux下的编译器 GCC 移植到了 Windows,并且包含了 win32 API,因此可以将源代码编译为可在 Windows 中运行的可执行程序。它还可以使用一些 Windows 不具备的,Linux平台下的开发工具。
MinGW项目目前已经接近停止,且只能编译生成32位可执行程序。2007年为了支持64位应用程序开发和新的WindowsAPI,从MinGW分叉而出。MinGW-w64 支持编译 64位和 32位 可执行程序。
1.1.1.3MSYS和MSYS2
MSYS,全称Minimal GNU(POSIX)system on Windows,是一个小型的GNU环境,包括基本的bash,make等等,可以看作是Cygwir的迷你版。
由于MSYS 常年不更新,于是 Alex 等人 在 Cygwin的基础上创建了MSYS2.MSYS2 包含了一些工具和库,提供易于使用的环境,用于构建、安装和运行本机 Windows 软件
它由一个名为 minty的命令行终端、bash、qit 和 subversion 等版本控制系统,tar和 awk 等工具,甚至 autotools 等构建系统组成,所有这些都基于 Cvgwin 的修改版本,尽管其中一些核心部件基于 Cygwin,但 MSYS2 的重点是为本地 Windows 软件提供构建环境,并且将使用 Cygwin 的部件保持在最低限度。MSYS2为 GCC、Mingw-w64、CPython、CMake、Meson、OpenSSL、FFmpeg、RustRuby 等提供最新的本机构件支持。
MSYS2安装包中包含了Mingw-w64。
1.1.2 技术基础
- Cygwin兼容层:提供部分POSIX兼容性,支持Unix程序在Windows运行。
- MinGW-w64工具链:支持生成原生Windows程序(32/64位),无需依赖Cygwin库。
- Pacman包管理器:移植自Arch Linux,支持软件安装、依赖解析及滚动更新(如 pacman -Syu更新系统)。
1.1.3 多环境支持
MSYS2提供了五种不同的终端环境
- MSYS2提供独立终端环境,适应不同开发需求:
- MSYS:POSIX兼容环境,适合移植Unix工具。
- MINGW64/MINGW32:编译原生64位/32位Windows程序。
- UCRT64(推荐):基于Windows 10/11通用C运行时库(UCRT),兼容性更佳。
- CLANG64/CLANG32:使用Clang编译器,支持现代C++标准
1.2 核心功能
1.2.1 类Unix开发环境
- 提供Bash Shell及常用工具(grep、sed、make、Git),支持脚本编写与文件管理。
- 支持中文路径输入,集成POSIX兼容库。
1.2.2 开发工具链
- 预装GCC、Clang、GDB、CMake等工具,支持C/C++项目编译、调试与构建。
- 可通过Pacman快速安装工具链(如 pacman -S mingw-w64-ucrt-x86_64-toolchain)。
1.2.3 软件仓库与包管理
- 提供数千预编译包(如Python、OpenCV、Qt),覆盖开发全场景。
- 自动处理依赖冲突,支持镜像源配置加速下载(如国内清华源)
二、安装和配置
直接找到官网下载安装即可
2.1 配置环境
里面一共具有多个环境,每一个里面都支持下载安装gcc工具。
2.1.1 UCRT64
为了方便我直接使用的是UCRT64,它和MinGW64差不多,但是在windows下支持的更好。参考链接
- 点击图中的UCRT64,将会打开一个终端
- 输入指令,配置该环境中的工具链
pacman -S --needed base-devel mingw-w64-ucrt-x86_64-toolchain
- 右击我的电脑,选择高级设置,在管理员环境变量中设置相应的环境变量
D:\msys64\ucrt64\bin
。如果不好用了重新配置环境变量MINGW即可。 - 此时在cmd中查看gcc和g++的路径,会发现它就指向环境变量这个位置。
到目前为止,其实就已经配置好了编译器,只需要再安装一个编辑器,比如vscode就可以执行C/C++程序了。
2.1.2 MINGW64
如果要用MINGW64,参考链接
- 搜索工具包gcc和gdb
pacman -Ss gcc
pacman -Ss gdb
可以看到会出现多个包,我们需要的是图中的绿色的。gdb也是一样的。
如果找不到的话,就pacman指令更新一下就好
- 安装工具包
pacman -S mingw-w64-x86_64-gcc
pacman -S mingw-w64-x86_64-gdb
这样就安装上了gcc和gdb。
三、MSYS2的功能
这个部分介绍MSYS2作为类Unix系统的功能,如果是要配置CMake并调试C/C++的话,直接跳转到第四部分即可。
3.1 模拟Unix
任意打开一个终端,它是这样的
其中用户名后面的紫色文字指定了系统的运行环境,这里是MSYS,如果想用别的可以切换成别的。在这里面我们可以执行unix中的命令,包括bash等。但是它本质上仍然不是linux系统。
3.2 文件系统
这个是MSYS2的安装文件夹,可以看到里面也具有usr、dev、etc等文件夹,就很象是linux操作系统。所以我就试着在MSYS终端和MINGW终端的~
路径下用mkdir
分别创建了文件夹new和nnew,它居然在home里的用户的文件夹中出现了,这表明在这样的系统里面模拟运行linux程序是很可能的(虽然不如wsl好用)。未来未必没有在嵌入式中交叉编译的可能性。
四、配置CMake开发环境
4.1.下载安装CMake
到CMake官网下载安装版或者绿色版都可以,进行安装。我下载的是安装版,安装到了D:\Program Files
目录下。
4.2.配置环境变量
- 右键我的计算机,找到“高级系统设置”
- 配置环境变量,直接配置系统变量即可,这样所有用户都可以使用
- 确认CMake安装路径下的bin文件,bin文件中放的是可执行程序CMake.exe
- 具体配置如下图,添加路径
D:\Program Files\CMake\bin
其实bin里面还包含了GUI等可执行文件
4.3.配置vscode
- 安装三个插件
4.4.构建CMake项目
- 打开工作区,创建文件夹,里面包含源文件、头文件等
- 工作区根目录创建文件
CMakeLists.txt
,这个是CMake构建文件。 - 创建之后选择编译器,上文我安装的MSYS2里面含有gcc编译器,刚好选择这个就好
- 如果要更换编译器
4.5.结果展示
- 文件结构
- hello.h内容
#ifndef __HELLO_H__
#define __HELLO_H__#include <iostream>class hello
{
private:/* data */
public:hello(/* args */);~hello();void print();
};hello::hello(/* args */)
{
}hello::~hello()
{
}#endif
- hello.cpp内容
#include "hello.h"void hello::print()
{std::cout << "hello world" << std::endl;
}int main()
{hello h;h.print();return 0;
}
- CMakeList.txt
cmake_minimum_required(VERSION 3.10) # 最低cmake版本
project(hello) # 项目名称
set(CMAKE_CXX_STANDARD 11) # 设置c++标准
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Werror") # 设置编译选项include_directories(${CMAKE_CURRENT_SOURCE_DIR}/inc) # 包含头文件目录,${CMAKE_CURRENT_SOURCE_DIR}是当前cmake文件所在目录set(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/bin) # 设置可执行文件输出目录aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/src SRC_LIST) # 查找src目录下所有源文件,并将结果赋值给SRC_LIST变量add_executable(hello ${SRC_LIST}) # 生成可执行文件
- 生成目标
- 结果
文件夹结构变为
├─.vscode
├─bin
├─build
│ ├─.cmake
│ │ └─api
│ │ └─v1
│ │ ├─query
│ │ │ └─client-vscode
│ │ └─reply
│ └─CMakeFiles
│ ├─4.0.0-rc3
│ │ ├─CompilerIdC
│ │ │ └─tmp
│ │ └─CompilerIdCXX
│ │ └─tmp
│ ├─CMakeScratch
│ ├─hello.dir
│ │ └─src
│ └─pkgRedirects
├─inc
└─src
bin里面生成了可执行程序hello.exe
4.6调试
点击生成右面的小虫子即可调试