# WindowsShell

# Flag

# WSL

# MinGW-w64

MinGW的全称是:Minimalist GNU on Windows 。它实际上是将经典的开源C语言编译器GCC移植到了Windows平台下, 并且包含了Win32API,因此可以将源代码编译为可在Windows中运行的可执行程序。 而且还可以使用一些Windows不具备的,Linux平台下的开发工具。一句话来概括:MinGW就是GCCWindows版本 。

MinGW-w64MinGW的区别在于MinGW只能编译生成32位可执行程序,而MinGW-w64则可以编译生成64位32位可执行程序。 正因为如此,MinGW现已被MinGW-w64所取代,且MinGW也早已停止了更新。

MinGW-w64使用WindowsC语言运行库,因此编译出的程序不需要第三方DLL,可以直接在Windows下运行。

那些著名的开源IDE实际只是将MinGW-w64封装了起来,使它拥有友好的图形化界面,简化了操作,但内部核心仍然是MinGW-w64

MinGW一个自由开源的最小开发工具集:mingw-gcc编译工具链、mingw软件包管理器(mingw-get),用于开发Windows原生程序。 第一版的mingw-gcc是利用早期的Cygwin套件编译而成,这个过程和Cygwin系列(二):初窥Cygwin背后中Cygwin DLL构建类似, 随后mingw-binutilsmingw-make等其他工具链也都逐渐移植成功,MinGW逐渐完全脱离了Cygwin

2005年,MinGW-w64项目基于MinGW创建,改善了MinGW的相关缺陷,并既支持32位程序又支持64位程序。 MinGW-w64项目开发活跃,被很多Linux发行版采用为交叉工具链,而MinGW事实上已被抛弃。

可以把MinGW视为MS Visual C++/Studio的开源替代品

# MinGW-w64下载

首先看到的是源码,要把页面滚动到最底部才能看到编译好的在线安装程序和离线压缩包

推荐离线安装,在线安装其实也是下载压缩包,而且众所周知的原因,国内通过在线安装非常缓慢

环境说明

  • 系统架构
    • x86_6464位操作系统
    • i68632位操作系统
  • 操作系统接口协议(为哪种操作系统开发程序)
    • posixLinuxUnixMac OS等其他操作系统
    • win32Windows操作系统
  • 异常处理模型(64位)
    • seh是新发明的,性能比较好,但不支持32位操作系统
    • sjlj是古老的,稳定性好,支持32位操作系统
  • 异常处理模型(32位)
    • dwarf性能要优于sjlj,不支持64位操作系统
    • sjlj稳定性好,支持32位操作系统

# MinGW-w64安装

  1. 如操作系统是Windows10-X64并为posix接口协议开发程序,则选择:x86_64-posix-seh
  2. 下载后把压缩包解压到指定盘符下,再添加到系统环境变量path
  • 如解压目录C:\Program Files\mingw64,则在CMD执行
setx /m Path "%PATH%;C:\Program Files\mingw64\bin"

:: 查看添加变量是否成功
echo %PATH%
set PATH

查看版本

gcc -v && g++ -v

# MSYS2

MSYS是用于辅助WindowsMinGW进行命令行开发的配套软件包,提供了部分Unix工具以使得MinGW的工具使用起来方便一些。 如果不喜欢庞大的Cygwin,而且使用不多,可以试试。不过喜欢完整体验、不在乎磁盘占用等等,还是推荐Cygwin而不是MSYS

MSYSMinGW两者有较大的独立性。MSYSMinimal SYStem的缩写,是一个基于Bourne Shell的命令行系统, 用于替代Windows中的cmd.exe,提供一个像Linux/UNIX的命令行环境。

MSYS是基于Cygwin早期版本(v1.3)发展而来,包含了少部分Linux/UNIX程序,没有编译工具链, 而且与Linux/UNIX原生程序或Cygwin程序相较丢失了很多功能特性,运行依赖于POSIX兼容层(msys-1.0.dll)。

如果没有MSYS,在cmd中也可以正常运行MinGW程序,但MinGWMSYS配合起来, 就组成了一个类似Linux/UNIX的、包含常用程序和完整开发工具的轻量但完备的系统环境, MinGW的安装路径可以挂载到MSYS目录树中任何位置。

MSYS项目仅支持32位程序,项目本身也发展缓慢。MSYS2基于最新版的Cygwin而创建,完全独立于MSYS而重写的版本 ,并既支持32位程序又支持64位程序,POSIX兼容层为msys-2.0.dllMSYS2msys2mingw32mingw64三个子系统组成,mingw32mingw64对应于mingw-w6432位64位版本。 还有一个特色就是,MSYS2移植了Arch Linux中的包管理器pacman

MSYS2不完全是基于MinGW的,至少其原生工具都是链接到自带的一套特定版本的Cygwin DLL的。 基本上只是用libalpm管理MSYS2MinGW-w64MinGW三个不同子系统的软件包

# MSYS2命令

  • pacman -S <packge-name> 安装软件
    • pacman -S mingw-w64-x86_64-make mingw-w64-x86_64-gcc
  • pacman -U <gz-file> 安装本地包,其扩展名为pkg.tar.gz
  • pacman -Syu 同步Msys2源,并更新
  • pacman -Sy 仅同步源
  • pacman -Su 更新系统
  • pacman -Sy <packge-name> 同步源后再安装软件
  • pacman -R <packge-name> 该命令将只删除包,不包含该包的依赖。
  • pacman -Rs <packge-name> 在删除包的同时,也将删除其依赖。
  • pacman -Rd <packge-name> 在删除包时不检查依赖。
  • pacman -Ss <keywords> 这将搜索含关键字的包。
  • pacman -Qi <packge-name> 查看有关包的信息。