如何安装Minimal SYStem(MSYS)
以上步骤基本上没有啥技术含量(一点都没有噢,只为记录一下,图片也漂亮点),注意到最后这个黑色的命令行,在安装结束之后会出现这么个命令行,其中会问你是否已经安装过MinGW了?在回答y之后,要求输入MinGW的地址,注意,在资源管理器里面我们都是用“\”来代表路径层级的分层的,在这里是用“/”(方向不一样)。另外地址中不允许带有空格。这一点在《如何安装MinGW》一文中已经有提到。
MSYS (Minimal GNU(POSIX)system on Windows)由于本文的主角是它,我们先来看看它是什么?从名字的全称我们可以看出它是一个小型的GNU环境。MSYS在windows下模拟了一个类unix的终端,它只提供了MinGW的用户载入环境,Cygwin在windows下模拟了一个linux环境,它们带有一些unix终端下常用的工具,如ls、tail、tar,其实它们都是相应unix/linux工具的windows版,而且它们的环境会继承windows的一些系统变量,如path,如果windows下装有ruby、rails,在它们的环境里同样都可以直接运行。
Cygwin(基于GPL licensed协议)
Cygwin并不是GNU,它只是实现了许多Windows API中没有的Unix风格的调用(如fork,spawn,signals,select,sockets等),并将它们封装在Cygwin.dll中,让Windows系统能够模拟出Unix的调用,进而直接使用Unix上的交叉编译器来生成可以在windows平台上运行的工具集。以这些移植到windows平台上的开发工具为基础,cygnus又逐步把其他的工具(几乎不需要对源代码进行修改,只需要修改他们的配置脚本)软件移植到windows上来。这样,在windows平台上运行bash和开发工具、用户工具,感觉好像在unix上工作。
MinGW(Minimalist GNU For Windows)
主要由GNU binary utilities、GCC和GDB组成。同时还包括一些必要的库,例如libc(C Runtime),及专门用于Win32环境的API接口库。如果你想学习linux环境下的编程,而又不想装linux,那你就装一个MinGW吧。
它与Cygwin实现了相同的梦想,也是为了实现在Windows上能够运行Unix上的工具。但与之不同的是它采用的是Windows C类库(mscvrt)而不是Cygwin采用的GNU C运行时类库。同时也因为两个运行时类库的端口不同而导致两者有诸多区别。但是却因为采用了直接支持Windows环境的Windows C运行时类库,它也给CDT(C/C++ Development Toolkit)提供了最好的支持。同时,它避免了像Cygwin使用了GPL协议。
C/C++ Development Toolkit(CDT)
C/C++ Development Toolkit(CDT)是基于Eclipse特征的,为使用C/C++编程语言,提供创建、编辑、导航、生成(build)和调试项目的一个集合。
它不包含必要的转换C/C++代码的编译器和调试器来执行和调试程序,但是它提供了一个允许这些工具集成在一个相容方式下协作的框架。它允许你根据你的项目需求来混合和匹配这些工具。
通常,商业发行的CDT包括了必要的工具集。如果你没有,那么最基本的CDT提供了综合的GNU工具来生成和调试。他们通常指Cygwin和MinGW等。
做了三个简单的概念介绍后,我们知道了它们各自的一些特征。它们都不是像Visual Studio这样可以拿来直接就用的软件,它们的使用需要一些必要的配置。这也是社区文化的一种体现。
以上的安装步骤最后一步出现的命令行模式,确实是大部分安装程序中不常出现的,那么它究竟为我们做了什么呢?带着这样的疑问,我们滚动到这副截图来看看它的内容。从内容中我们可以看到在安装完毕之后我们会被要求输入MinGW的所在目录,根据文档中的说明,我们可以将MinGW放在除了MSYS目录的任何的一个目录中(也就是如图D:\GNU\MSYS位置不能放),至于放了之后会怎样,笔者也不知晓,望知晓者可以告知在下,定当感激不尽。
之后它会根据我们给出的路径在MSYS目录下的etc文件夹(如本例中的D:\GNU\MSYS\1.0\etc)内找到fstab文件并进行编辑(会在稍后描述)。然后检查我们给出的路径下的一些文件。从图中我们可以看到我们缺少了一个非常重要的make.exe文件,这个文件其实存在,只是文件名不同,我们可以将其重命名为make.exe。(本例中,我们将已经安装的D:\GNU\MinGW\bin\mingw32-make.exe修改为D:\GNU\MinGW\bin\make.exe即可)
fstab文件
与fstab相同路径下的有个fstab.sample文件,这是一个示例文件。您可以仿造它进行一些设置。(如果您按照之前我们的安装步骤,并且中途没有出现偏差的话,那么通常您已经正确设置了fstab文件,如果因为其它原因您需要修改该文件,也可以参考该部分内容。)fstab文件将是dll初始化期间唯一被载入的文件。它的格式我们可以看到,是由一个物理路径+“空格/TAB制表格”+Mount_Point来维持的。它实现了一个路径映射的体系结构,以至于我们不必手动地搬动那些文件到正确的目录,也能够让我们正确地访问我们所需的文件。
下图为fstab.sample文件
下面我们打开fstab看看系统之前为我们设置了什么:
从本例子中我们发现了系统为我们做好了这样一个映射。将D:/gnu/mingw映射到了/mingw。
MSYS只是一个模拟的平台,我们除了让它跟MinGW实现互联互通,我们也能够让它跟系统上的其他程序互联互通。
通过运行D:\GNU\MSYS\1.0\msys.bat批处理文件,我们可以打开如上图所示的命令行窗口(它的功能基本上类似于运行了D:\GNU\MSYS\1.0\bin\sh --login -i语句)
执行的内容相当于运行了下面的批处理语句。
下面让我们打开一个word程序。我们在命令行下输入:
$ start '/d/Program\ Files/Microsoft\ Office/Office12/WINWORD' $@
语句(具体路径视您本机的word安装程序路径所定)
我本机的路径为
D:\Program Files\Microsoft Office\Office12\WINWORD.EXE
我们很容易看出它们二者之间的区别。下面我就针对这些区别做一些简要的解释。
首先我们看“D”是一个盘符,在这个映射里面,我们规定,盘符若为“D:\”我们就将其转化为“/d”,同时为了与Unix的使用习惯一致,在资源管理器中表示层次的“\”符号都变成了“/”,若遇到空格,我们则以“\ ”(\+空格)来表示。因此我们有了如上一个等价的路径转换。
复制粘帖
说到使用这样的命令行方式大家一定觉得还不是那么方便。因为这里不能够复制粘贴。但你错了,这里复制粘贴也很容易。
复制:选择你要复制的部分,然后鼠标点一下,就可以了。容易吧?
粘帖:只需用shift+鼠标左键,就可以直接将剪贴板内的文字粘帖进来了。
(更多办法请参考doc/msys/readme.rtf)