可以启动MSYS2默认 shell 程序(bash),从三个启动器中进行选择,这些启动器还设置了环境变量MSYSTEM。特别:

  • msys2_shell.bat将其设置为MSYS
  • mingw64_shell.bat将其设置为MINGW64
  • mingw32_shell.bat将其设置为MINGW32

  • 除了shell的提示符外,可见的区别是:
  • 有一个等效的shell变量$MSYSTEM导出;
  • uname输出基于$MSYSTEM
  • $MSYSTEMMINGW*时,/mingw*/bin$PATH中的第一个路径。

  • 假设我们有/usr/bin/gcc/mingw64/bin/gcc/mingw32/bin/gcc$MSYSTEM设置值的明智结果是我们将使用不同的编译器生成不同的二进制文件(POSIX或本机32/64)。
  • $MSYSTEM值确定的其他重要区别是什么?
  • 是否有任何使用此变量的二进制文件?
  • pacman受子系统影响吗?
  • 最佳答案

    以下摘自MinGW-w64贡献者Ray Donnelly的post。它启发了这个主题,是我的问题的重要序言。



    在Ray Donnelly的帖子中,构成系统的首要任务是PATH变量,因为根据目录优先级,Google的存储库工具将使用MSYS2或MinGW软件包构建。
    实际上,在MSYS2和MinGW shell 之间切换的shell脚本会导出环境变量MSYSTEM及其参数mingw32|mingw64|msys并获取/etc/profile的源。后者又根据PATH的值设置MSYSTEM。对于MSYS2,PATH一般是/usr/local/bin:/usr/bin:/bin,而对于MinGW 64来说是/mingw64/bin:/usr/local/bin:/usr/bin:/bin,因此运行gcc编译器将相应地执行MSYS2或MinGW版本。
    还有其他小环境。变量,例如MANPATH在调用正确的二进制文件后阅读正确的手册,或PKG_CONFIG_PATH在构建时阅读正确的lib文件。

    至于pacman,它不受影响并不完全是事实,如@David Grayson的评论。
    MSYS2 wiki模糊地确认:



    Ray Donnelly在另一个post中再次阐明了这些内容:



    加起来:
    $MSYSTEM值确定的其他重要区别是什么?
    直接的显着差异是@David Grayson标识的路径变量的相关值。

    是否有任何使用此变量的二进制文件?
    可以肯定地说,没有直接读取$MSYSTEM的特定二进制文件,但是大量软件使用/读取基于$MSYSTEM的上述路径变量。
    pacman是否受子系统影响?
    是。

    关于mingw - MSYS与MinGW:内部环境变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37460073/

    10-13 07:42