前言
- 本文內容是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