【2010-11-18 注】
目前MinGW已经提供了自动安装包。尽管如此,这篇文章的内容依然有效。如果需要查看关于MinGW和MSYS自动安装的内容,请移步:
http://www.swingworks.net/2010/11/install_mingw_and_msys_with_mingw-get-inst/
Linux接触不久了,由于专业的缘故,在实验室里写个C或者写个Shell是一件很平常的事情,也喜欢编译许多方便好用的GNU开源小软件。可惜在Win上这些都不太容易做到,一是Win太喜欢IDE,动不动开个VS然后建立工程是个很麻烦的事情;二是Win下缺少必要的编译组件,基本的gcc在Win上都不能找到。事实上,在Terminal下摸了几把的童鞋一定是对Win下的cmd命令行非常不习惯了(比如本人时常开个cmd然后ls,ls,ls…),如果有个bash,可能倒更符合自己的习惯一些。
MinGW的全称叫Minimalist GNU for Windows,是一套Windows环境下GNU编译组件的接口,通俗的可以说是Win上的gcc [1]。比起MinGW,也许那只企鹅CygWin更加著名一些,实现的效果也差不多,但事实上两者的原理是不同的。Cygwin通过一个中间层的动态链接库来实现Win API和Cygwin的连接,好处是应用在Linux与Win之间移植更加方便,风格更加一致,缺点是发布应用时一定要带上Cygwin的环境动态库,应用执行效率也略微有点低;MinGW则使用静态链接的方式,生成的应用更加本地化,不需要依赖任何第三方的C/C++ RT动态链接库,仅依赖Win自身的运行环境,应用执行效率也稍高[4]。当然现在这两家也开始有了一些功能的互补,总而言之可以相互作为替代品使用。(2012-05-02修改)
MSYS的全称叫Minimal SYStem,是MinGW的一个子系统,是一套运行在Windows上的bash,也就是运行在Win上的Linux Terminal [1]。这个比较好理解,其实就是在Win上使用Linux的命令行进行操作,可以代替cmd来使用。对一些GNU的开源软件,MSYS可能是必需的,因为它们通常需要./configure然后make才能运行(学Linux的童鞋应该非常熟悉这个流程了)[2]。我们将MSYS和MinGW配合使用就可以打造出一个Win下的GNU命令行终端和编译系统。
有一点需要说明的是,MinGW是MSYS都是一套组件而不是一个单独的程序。我们需要下载两者的各组件的压缩包来完成安装和配置。组件的意义在于,我们可以下载需要的部分来配置一个想要的系统,比如不搞编译器设计的童鞋可能不需要flex和bison组件(用来词法和语法分析的),而automake工具也可以在需要的时候才安装,这类似于Linux下环境的配置。知道了这些,我们就可以开始MinGW和MSYS的安装了。