前言
- 本文内容是MSys2 Documentation的学习笔记
- 可以使用MSYS2编译QGis
学习笔记
什么是MSYS2?
MSYS2(Minimal System 2)是一个为Windows平台打造的软件开发环境和包管理系统,它结合了Cygwin的POSIX兼容层、Arch Linux的pacman包管理器以及MinGW-w64工具链,为开发者提供了强大的开发工具集合。
- 我理解就是在windows上搭建了一套类linux的开发环境
MSYS2的核心功能
- 原生Windows程序开发:
提供完整的GCC工具链(包括gcc、g++、gdb等)
支持构建32位和64位Windows原生应用
包含最新的UCRT(Universal C Runtime)支持 - 类Unix开发环境:
提供bash shell和数百个Unix工具(grep、sed、awk等)
支持shell脚本和Makefile
提供熟悉的Unix文件系统布局(/usr, /etc等) - 强大的包管理系统:
基于Arch Linux的pacman包管理器
包含超过3000个预编译软件包
支持自动解决依赖关系
MSYS2 vs Other Projects
其他类似项目
- WSL
WSL,全称 Windows Subsystem for Linux,是微软为Windows 10及更高版本(包括Windows Server 2019和后续版本)提供的一个兼容层,它允许用户直接在Windows操作系统上运行原生的Linux二进制可执行文件(ELF格式)。这意味着开发者可以在不安装虚拟机或双系统的情况下,在Windows中使用Linux环境进行开发工作。WSL非常适合那些需要同时使用Windows应用程序以及Linux工具链、库或者服务的用户。
- Chocolatey
Chocolatey 是一个用于 Windows 的包管理器,类似于 Linux 中的 APT 或 YUM。它允许用户通过命令行界面安装、升级和卸载软件包。Chocolatey 旨在简化 Windows 系统上的软件管理和自动化过程,使得维护系统软件变得更加容易。
- Cygwin
Cygwin 是一个在 Windows 操作系统上运行的大型集合,它提供了一套工具和库,使得许多流行的类 Unix 应用程序能够在 Windows 上编译并运行。通过 Cygwin,用户可以获得一个与 Linux 或其他类 Unix 系统类似的环境,包括 shell(如 bash)、文件系统接口、大量 GNU 工具以及其他开源软件。
- Arch Linux
Arch Linux 是一个轻量级且灵活的Linux发行版,它遵循KISS(Keep It Simple, Stupid)原则,旨在为用户提供最大程度的自由和控制
Msys2和其他类似项目比较
MSYS2 vs WSL
-
MSYS2
✅ 支持构建原生Windows应用程序
✅ 生成的程序直接运行于Windows环境
✅ 提供完整的MinGW-w64工具链 -
WSL
🔄 仅支持交叉编译
💡 适合场景:- 需要Linux命令行工具
- 开发最终部署在Linux服务器的应用
- 需要完整Linux环境
MSYS2 vs Chocolatey
特性 | MSYS2 | Chocolatey |
---|---|---|
包构建方式 | 从源码构建 | 打包预编译二进制 |
软件类型 | 主要是开源工具链 | 开源/闭源软件混合 |
主要用途 | 开发环境搭建 | 软件安装管理 |
包管理 | pacman | choco |
MSYS2 vs Cygwin
- MSYS2优势:
- 专注于Windows原生开发
- 更现代化的工具链(UCRT)
- 更好的性能表现
- Cygwin特点:
- 提供更完整的POSIX兼容性
- 适合移植Unix软件到Windows
- 包含更多Unix系统组件
MSYS2包管理
仓库分类
MSYS2 维护着 6个核心软件包仓库,分为两大类型:
传统仓库 (Classical)
-
msys2
- 基础系统组件仓库
- 包含核心开发工具和依赖项
- 路径前缀:
/usr
-
mingw32
- 32位MinGW-w64工具链
- 使用MSVCRT运行时
- 包名前缀:
mingw-w64-i686-
-
mingw64
- 64位MinGW-w64工具链
- 使用MSVCRT运行时
- 包名前缀:
mingw-w64-x86_64-
现代仓库 (Modern)
-
ucrt64 (推荐)
- 64位UCRT(Universal C Runtime)工具链
- Windows 10+原生支持
- 包名前缀:
mingw-w64-ucrt-x86_64-
-
clang32
- 32位LLVM/Clang工具链
- 兼容传统32位系统
- 包名前缀:
mingw-w64-clang-i686-
-
clang64
- 64位LLVM/Clang工具链
- 现代编译优化支持
- 包名前缀:
mingw-w64-clang-x86_64-
架构对比表
仓库类型 | 位宽 | 工具链 | 运行时 | 前缀格式 |
---|---|---|---|---|
mingw32 | 32位 | GCC | MSVCRT | mingw-w64-i686-* |
mingw64 | 64位 | GCC | MSVCRT | mingw-w64-x86_64-* |
ucrt64 | 64位 | GCC | UCRT | mingw-w64-ucrt-x86_64-* |
clang32 | 32位 | LLVM | MSVCRT | mingw-w64-clang-i686-* |
clang64 | 64位 | LLVM | UCRT | mingw-w64-clang-x86_64-* |
最佳实践建议:
新项目建议优先选用 ucrt64 仓库,因其采用Windows现代运行时环境,具有更好的兼容性和性能表现。
pacman
- pacman -Ss <name or part of the name of the package> 包查找命令
- pacman -S <name of the package> 包安装命令
- pacman -R <name of the package> 包删除
- pacman -U <packagefile.tar.xz> 安装特定版本包
- pactree mingw-w64-x86_64-gettext 查找依赖
- pacman -Qo <full file path> 查看文件属于哪个包
- pacman -Ql <name of the package> 查看包包含的文件
pacboy
pacboy 是 MSYS2 提供的特殊包管理工具,专门用于简化 MinGW-w64 和 Clang 环境的包管理操作。它作为 pacman 的封装器
-
通过后缀指定目标环境:
:i → 安装到 mingw32
:x → 安装到 mingw64
:u → 安装到 ucrt64
:c → 安装到 clang32
:l → 安装到 clang64
示例:pacboy install python3:u 会在 ucrt64 环境安装 Python -
批量操作支持
支持同时为多个环境安装相同软件包
示例:pacboy install gcc:i:x:u
会同时安装三个环境的 GCC -
注意事项
需要先安装 pactoys 包:pacman -S pactoys