作者:龍飛
3.1:MinGW 是什么?
MinGW 提供了一套簡(jiǎn)單方便的Windows下的基于GCC 程序開發(fā)環(huán)境。MinGW 收集了一系列免費(fèi)的Windows 使用的頭文件和庫(kù)文件;同時(shí)整合了GNU( http://www.gnu.org/ )的工具集,特別是GNU 程序開發(fā)工具,如經(jīng)典gcc, g++, make等。MinGW是完全免費(fèi)的自由軟件,它在Windows平臺(tái)上模擬了Linux下GCC的開發(fā)環(huán)境,為C++的跨平臺(tái)開發(fā)提供了良好基礎(chǔ)支持,為了在Windows下工作的程序員熟悉Linux下的C++工程組織提供了條件。
3.2:為什么使用MinGW?
因?yàn)槲液秃芏郔T人士一樣,不愿意吊死在$M這棵樹上。且不說(shuō)開源這個(gè)理念的偉大,僅僅就Windows的安全性也已經(jīng)讓人們很不安心了。如果再深入一點(diǎn)從編寫程序來(lái)看,在C++標(biāo)準(zhǔn)尚不成熟時(shí)期產(chǎn)生的MFC今天看來(lái)基本上就是蓋子大叔憑著個(gè)人(或許是$M公司^^)理解所使用的C++方言。在我們期盼C++0x時(shí)代到來(lái)之前,沒(méi)有任何實(shí)際行動(dòng)能比嚴(yán)格遵循C++的ISO標(biāo)準(zhǔn)更能表達(dá)我們對(duì)于C++這個(gè)偉大的哲學(xué)體系的尊重。從這個(gè)角度來(lái)說(shuō),遵循ISO標(biāo)準(zhǔn)的實(shí)現(xiàn)就是好的實(shí)現(xiàn)。所以,MinGW不會(huì)比VC差,況且,他既是開源軟件家族中的一員,也是*nix平臺(tái)下事實(shí)標(biāo)準(zhǔn)GCC的翻版。如果有一天我們開始使用Linux平臺(tái)了,會(huì)因?yàn)榻裉焱高^(guò)MinGW所了解的GCC知識(shí)而受益。
3.3:MinGW 的下載和安裝。
MinGW的官方主頁(yè)是:
http://www.mingw.org/
你很容易找到下載的鏈接。下載文件是放在sourceforge上的,這也表明MinGW本身也是個(gè)在開發(fā)中的項(xiàng)目。
http://sourceforge.net/project/showfiles.php?group_id=2435
下載頁(yè)面上有很多令人眼花繚亂的文件,不用害怕,因?yàn)檫@才是軟件最真實(shí)的一面。當(dāng)然,這個(gè)軟件的提供者為普通使用者也提供了最為簡(jiǎn)單的下載和安裝方式。你只需要下載“MinGW自動(dòng)下載和安裝軟件”(Package: Automated MinGW Installer; Release: MinGW-5.1.3)MinGW-5.1.3.exe就可以根據(jù)提示簡(jiǎn)單的安裝了。并且,安裝后的MinGW甚至可以通過(guò)這個(gè)文件來(lái)自動(dòng)升級(jí),非常的人性化。
安裝時(shí)需要注意以下幾個(gè)方面:
1) 建議選擇Current版本,Previous表示以前的版本;Candidate表示當(dāng)前正在開發(fā)的版本,可能正在測(cè)試中,還不是非常穩(wěn)定。
2) 在選擇安裝模塊的時(shí)候,根據(jù)我們的需要,只需要選擇以下三個(gè):MinGW base tools, g++ compiler, MinGW Make。
3) 安裝路徑請(qǐng)選擇一個(gè)容易找到的地方,默認(rèn)的C:\MinGW 是不錯(cuò)的選擇。
3.4:MinGW的簡(jiǎn)單使用。
打開“命令提示符”(console)窗口,我們可以簡(jiǎn)單的把目錄轉(zhuǎn)到比如 C:\MinGW\bin 這樣的位置去工作。但是這顯然不是一個(gè)好的方式,因?yàn)檫@樣一定會(huì)把bin里面搞得很混亂。所以,我們?cè)诹硗庖粋€(gè)“干凈”的地方,比如 D:\Project ,把這里設(shè)置成MinGW的工程工作區(qū)。這樣,我們需要在系統(tǒng)的path里面添加能找到bin下面*.exe文件的路徑,所以做一個(gè)批處理文件是最簡(jiǎn)單的方法。我的startg++.bat文件這樣寫的:
@echo ---**歡迎使用MinGW(GCC)系統(tǒng)**---
@echo Update by lf426 ( E-mail: zbln426@163.com ) 2007-12-10
@cmd
然后,你可以建立一個(gè)該文件的快捷方式放在桌面上,再為這個(gè)快捷方式指定一個(gè)漂亮的圖標(biāo),nice!
接下來(lái),我們需要建立一個(gè)cpp文件,用什么來(lái)寫cpp呢?
3.4.1:(插播)Vim ??
這又是一個(gè)有著傳統(tǒng)的“悠久”歷史,很好很強(qiáng)大的,免費(fèi)開源的,牛x文本編輯器。官方主頁(yè)是:
http://www.vim.org/
不用懷疑,你可以很容易的下載Vim的安裝程序,并且很容易的安裝,不需要任何的“破解”-_-!!
因?yàn)閂im很好很強(qiáng)大,所以,太多的內(nèi)容就留給包括我自己在內(nèi)的大家自己去學(xué)了(我的邏輯Orz)。我們這里簡(jiǎn)單的只需要了解如下幾點(diǎn):
1) 建立一個(gè)名為 abc.def 的文本文件,在console窗口下輸入:
vim abc.def
你就進(jìn)入了vim的編輯界面。
2) 按"i"鍵,就可以輸入文本了。退回到編輯方式,按Esc,再進(jìn)入插入方式,再按i,就這樣...
3) vim在編輯方式下本來(lái)的光標(biāo)移動(dòng)是h, j, k, l,不過(guò),上下左右箭頭也是可以使用的。
4) 編輯完成后,(編輯方式下)按Shift+Z兩次,或者:wq就可以保存退出。使用:q!可以不保存強(qiáng)制退出。
3.4.2:MinGW的簡(jiǎn)單使用。(續(xù))
繼續(xù)剛才的話題,我們建立一個(gè)叫 hello.cpp 的文件(據(jù)說(shuō)Hello World是程序員的咒語(yǔ)...)
int main(int argc, char* argv[])
{
std::cout << "Hello World." << std::endl;
return 0;
}
我們可以簡(jiǎn)單的使用命令:g++ hello.cpp,與最傳統(tǒng)的Unix系統(tǒng)下的C編譯器一樣,MinGW為我們生成了一個(gè)名為a的可執(zhí)行文件,當(dāng)然,在win32下,名字叫做a.exe。
可以使用參數(shù) -o 來(lái)指定編譯的可執(zhí)行文件的名字:g++ -o hello.exe hello.cpp (或者也可以不寫名exe,直接g++ -o hello hello.cpp 結(jié)果一樣)。這樣,得到的文件就是hello.exe。
可以使用參數(shù) -c 來(lái)生成與源文件名相同的目標(biāo)文件:g++ -c hello.cpp ,得到的文件是hello.o 。
目標(biāo)文件可以繼續(xù)連接成可執(zhí)行文件:g++ hello.o ,得到文件a.exe 。
多個(gè)源文件,目標(biāo)文件和庫(kù)文件都可以同時(shí)編譯和連接。
3.5:獲得MinGW下的SDL開發(fā)庫(kù)。(Development Libraries)
下載頁(yè)面:http://www.libsdl.org/download-1.2.php
下載:SDL-devel-1.2.13-mingw32.tar.gz (Mingw32)
3.6:為MinGW設(shè)置SDL庫(kù)。
找到你在硬盤上安裝MinGW的位置,類似:
C:\MinGW
打開include文件夾,在里面建立一個(gè)新文件夾,取名為SDL,打開這個(gè)新的文件夾:
C:\MinGW\include\SDL
然后,將SDL Development Libraries中include文件夾里面的文件全部拷貝到剛才建立起來(lái)的那個(gè)新文件夾中。
然后,回到MinGW的文件夾下,打開lib文件夾:
C:\MinGW\lib
將SDL Development Libraries中l(wèi)ib文件夾下的libSDL.dll.a, libSDL.la和libSDLmain.a三個(gè)文件拷貝到剛才的那個(gè)MinGW的lib文件夾下。
最后,把SDL Development Libraries中l(wèi)ib文件夾下的SDL.dll文件拷貝到
C:\WINDOWS\system32
下。當(dāng)然,另外一個(gè)選擇是將SDL.dll隨時(shí)綁定到使用了SDL庫(kù)編譯的*.exe文件所在的文件夾中。這通常在發(fā)布你的程序的時(shí)候使用。
3.7:建立第一個(gè)SDL程序。
運(yùn)行我們之前的那個(gè)startg++.bat 文件,打開console窗口,執(zhí)行命令:vim main.cpp ,將下列代碼寫入并保存。
#include "SDL/SDL.h"
int main(int argc, char* argv[])
{
try {
if ( SDL_Init(SDL_INIT_EVERYTHING) == -1 )
throw "Could not initialize SDL!";
}
catch ( const char* s ) {
std::cerr << s << std::endl;
return -1;
}
std::cout << "SDL initialized.\n";
SDL_Quit();
return 0;
}
參數(shù) -l (小寫的L)使庫(kù)文件得以與源文件一起編譯和連接。(簡(jiǎn)單的可以認(rèn)為-labc即連接了名稱符合libabc.*的所有庫(kù)文件)
最后說(shuō)明的兩個(gè)參數(shù)是:-mconsole 和 -mwindows
他們的效果是使可執(zhí)行程序是帶命令行控制窗口的或者是純Windows窗口的,缺省情況下應(yīng)該是帶命令行控制窗口的。
運(yùn)行mysdl.exe可以看到文件的執(zhí)行情況。