我也有问题 #2:“MinGW-w64 Win32 Shell 和 MSYS2 Shell 有什么区别?”。我在这个官方 wiki 页面上找到了答案。有关原始完整格式,请参阅原始页面。这是截至 2017 年 8 月 9 日页面的相关部分。
MSYS2 子系统
MSYS2 由三个子系统及其对应的包存储库 msys2、mingw32 和 mingw64 组成。
mingw 子系统提供本地 Windows 程序,是该项目的主要关注点。这些程序旨在与其他 Windows 程序很好地协作,独立于其他子系统。
msys2 子系统为构建软件、包管理和 shell 脚本提供了一个模拟的大部分符合 POSIX 的环境。这些程序存在于一个虚拟的单根文件系统中(根是 MSYS2 安装目录)。为使这些程序与本机 Windows 程序很好地协同工作,我们付出了一些努力,但这并不是无缝的。
每个子系统在 msys2-devel、mingw-w64-i686-toolchain 和 mingw-w64-x86_64-toolchain 中都提供了自己的本机(即目标=主机)编译器工具链。mingw-w64-cross-toolchain 中也有 host={i686,x86_64}-pc-msys 和 target={i686,x86_64}-w64-mingw32 的交叉编译器工具链,但是因为没有库,所以使用有限包给他们。
贝壳
每个子系统都有一个关联的“shell”,它本质上是一组允许子系统正常协作的环境变量。可以使用 MSYS2 安装目录中的启动器或使用 Windows 开始菜单中的快捷方式调用这些 shell。启动器设置 MSYSTEM 变量并使用适当的 shell (bash) 打开终端窗口 (mintty)。Bash 依次获取 /etc/profile,它根据 MSYSTEM 的值设置环境。如果没有正确的环境,各种各样的事情可能而且将会(有时是默默地)破裂。例外是使用纯 Windows 中的 mingw 子系统,除了 PATH 中的条目外,它不需要任何特殊环境。不要在 shell 之外设置 MSYSTEM,因为这也会破坏事情。