Msys/MinGW與Cygwin/gcc
一、 MinGW
MinGW 官方網站為 http://www.mingw.org/
MinGW,即 Minimalist GNU For Windows(GCC compiler suite)。它是一些頭文件和端口庫的集合,該集合允許人們在沒有第三方動態鏈接庫的情況下使用 GCC(GNU Compiler C)產生 Windows32 程序。
MinGW: 一個可自由使用和自由發布的Windows特定頭文件和使用GNU工具集導入庫的集合,在基本層,MinGW 是一組包含文件和端口庫,其功能是允許控制臺模式的程序使用微軟的標準C運行時間庫(MSVCRT.DLL),該庫在所有的 NT OS 上有效,在所有的 Windows 95 發行版以上的 Windows OS 有效,使用基本運行時,你可以使用 GCC 寫控制臺模式的符合美國標準化組織(ANSI)程序,可以使用微軟提供的 C 運行時擴展。該功能是 Windows32 API 不具備的。下一個組成部分是 w32api 包,它是一組可以使用 Windows32 API 的包含文件和端口庫。與基本運行時相結合,就可以有充分的權利既使用 CRT(C Runtime)又使用 Windows32 API 功能。
實際上 MinGW 並不僅是一個 C/C++ 編譯器,而是一套 GNU 工具集合。除開 GCC (GNU 編譯器集合) 以外,MinGW 還包含有一些其他的 GNU 程序開發工具 (比如 gawk bison 等等)。
開發 MinGW 是為了那些不喜歡工作在 Linux(FreeBSD) 操作系統而留在 Windows 的人提供一套符合 GNU 的 GNU 工作環境。所以,使用 MinGW 我們就可以像在 Linux 下一樣使用 GNU 程序開發工具。
GCC 就是 MinGW 的核心所在,GCC 是一套支持眾多計算機程序語言的編譯系統,而且在語言標準的實現上是最接近於標準的。並且 GCC 幾乎可以移植到目前所有可用的計算機平臺。
GCC 本身不像VC那樣擁有IDE界面(但是有很多的開源的IDE支持使用MinGW,例如codeblocks,eclipse等)。源代碼編輯你可以選用任何你喜歡的文本編輯器(據說微軟的開發人員包括 VC 的開發都不用 VC 所帶的 IDE 編輯器,而是選用 GNU 的 VIM 編輯器)。然後使用 make 等工具來進行軟件項目的編譯、鏈接、打包乃至發布。而像 cvs(svn) 源代碼版本控制工具可以讓世界上任何一個角落的人都可以參與到軟件項目中來。
關於 MFC,微軟基礎庫類,這個隨 VC++ 攜帶的一個源代碼公開的開發包,和其他 Windows 程序開發包是一樣的。如果有 VC++ 的授權,你完全可以使用 MFC 的源代碼,也就是你使用 GCC 來編譯 MFC 程序是完全可以的。
當然,GNU 下也有很多 Windows 程序開發包,甚至有一些是支持跨平臺使用的。不僅僅可以直接把源代碼編譯為 Windows 程序,也可以不經修改編譯為其他操作系統的圖形程序。
二、 MSYS
官方網站為 http://www.mingw.org/
MSYS:Unix-like command line utilities,包括基本的bash, make, gawk and grep 等等。通常也可以認為是小型的UNIX on Windows。提供在windows上模擬Unix環境來使用MinGW。
msys-cn:http://code.google.com/p/msys-cn/
MSYS中國發行版,用UNIX開發環境開發Windows程序。
MSYS在windows下模擬了一個類unix的終端,它只提供了MinGW的用戶載入環境,在MSYS模擬的unix環境下使用MinGW,就像在Unix使用gcc一樣。
三、 cygwin/gcc
cygwin/gcc和MinGW都是gcc在windows下的編譯環境,但是它們有什麽區別,在實際工作中如何選擇這兩種編譯器。
cygwin/gcc完全可以和在linux下的gcc化做等號,這個可以從boost庫的劃分中可以看出來端倪,cygwin下的gcc和linux下的gcc完全使用的是相同的Toolsets。所以完全可以和linux一起同步更新gcc版本,而不用擔心問題,並且在cygwin/gcc做的東西(不用win32的)可以無縫的用在linux下,沒有任何問題。是在windows下開發linux程序的一個很好的選擇。
但是在cygwin/gcc下編譯出來的程序,在windows執行必須依賴cygwin1.dll,並且速度有些慢,如果不想依賴這個東西的化,必須在gcc的編譯選項中加入-mno-cygwin。加入這個選項其實gcc編譯器就會自動的選擇在安裝cygwin/gcc時安上的mingw,這個mingw就是gcc的一個交叉編譯。
對於mingw作為gcc在windows上的一個實現,由於不像cygwin的gcc在一個模擬linux上運行,同時相當一部分linux的工具不能夠使用,不過現在已經有Msys這個模擬unix的shell,可以解決很多的問題。
四、 總結
MinGW是windows版本的gcc集合,不需要依賴中間層。
MSYS是小型的linux的環境的模擬,可以與MinGW結合來模擬linux環境下使用MinGW的gcc。
Cygwin是功能強大的linux環境,由於有cygwin1.dll實現了底層的windows api到linux api的轉化。所以在Cygwin裏開發就相當於在linux上開發,對於開發人員來說就相當於調用linux類型的api,所以這樣開發的程序也可以直接移植到linux上。但是如果這樣的程序要在windows上執行的話,運行時必須要cygwin1.dll支持。
根據以上的分析,如果在windows開發linux跨平臺的程序,linux模擬器Cygwin以及所包含的gcc是很好的選擇,但是開發的程序必須依賴一個cygwin1.dll。如果你只是想在windows下使用gcc編譯器也不想依賴其他的dll,mingw是很好的一個選擇。
Msys/MinGW與Cygwin/gcc