1. 程式人生 > >WINDOWS下如何安裝GCC

WINDOWS下如何安裝GCC

(轉載http://nirvana.cublog.cn;作者:北斗星君(黃庠魁))

第一章 在視窗作業系統下的GCC

第一節 GCC家族概覽

GCC 是一個原本用於 Unix-like 系統下程式設計的編譯器。不過,現在 GCC 也有了許多 Win32 下的移植版本。所以,也許對於許多 Windows 開發者來說, GCC 還是一個比較陌生的東西。所以,我希望通過這章的敘述,讓你——一個 Windows 開發者對 GCC 這一個優秀的編譯器有一個大概的瞭解。

歷史

GCC是GNU公社的一個專案。是一個用於程式設計開發的自由編譯器。最初,GCC只是一個C語言編譯器,他是GNU C Compiler 的英文縮寫。隨著眾多自由開發者的加入和GCC自身的發展,如今的GCC以經是一個包含眾多語言的編譯器了。其中包括 C,C++,Ada,Object C和Java等。所以,GCC也由原來的GNU C Compiler變為GNU Compiler Collection。也就是 GNU編譯器家族 的意思。當然,如今的GCC藉助於他的特性,具有了交叉編譯器的功能,即在一個平臺下編譯另一個平臺的程式碼。

直到現在, GCC 的歷史仍然在繼續,他的傳奇仍然被人所傳頌。

Windows 下的 GCC 家族

起初, GCC 是用於 Unix,Unix-like 系統的編譯器。不過,現在 Windows 下也出現了 GCC 的穩定移植版。這要感謝 Internet 上眾多程式設計師的共同努力。

如今,在Windows下比較流行的GCC移植版主要有三個。他們是 MinGW,Cygwin和Djgpp。雖然,Djgpp是應用於DOS系統的,考慮到windows對DOS的相容,所以也將Djgpp納入其中了。

總體來說, MinGW , Cygwin 和 Djgpp 各有特色,針對不同的應用場合,可以選擇不同的移植版來滿足需要。 MinGW 這個系列的移植,主要方向是讓 GCC 的 Windows 移植版能使用 Win32API 來程式設計。而 Cygwin 的目標是能讓 Unix-like 下的程式程式碼在 Windows 下直接被編譯。至於 Djgpp ,則是想讓 DOS 下也能用上 GCC 。 所以,對於開發人員不同的需求。選擇合適的移植版會讓工作變得輕鬆而高效。

本書的 GCC

我個人對 GCC 的移植版都非常喜歡。不論是 MinGW 還是 Cygwin ,亦或是 Djgpp 。在本書中,除了特殊說明以外,所述的內容適合所有這三種移植版。 不過,考慮到現在在 Windows 下用的比較多的是 MinGW 系列。再加上 MinGW 較 Cygwin 和 Djgpp 安裝和使用更為簡便。所以,建議讀者學習時還是使用 MinGW 。

第二節 入鄉隨俗的MinGW

簡介

MinGW是Minimalistic GNU for Windows 的縮寫。她是一個建立在GCC和binutils 專案上的編譯器系統。和其他GCC的移植版相比,她可以說是最接近Win32的一個了。因為,MinGW幾乎支援所有的Win32API,這也是MinGW的特色之一。她所連線的程式,不需要任何第三方庫就可以運行了。在某種程度上看,MinGW更像是VC的替代品。

獲得與安裝

如果,你要安裝 MinGW ,那麼你有兩種安裝方案。下面我來一一介紹。

安裝方案一:

首先,你要從 http://www.mingw.org/download.shtml 上下載如下幾個壓縮包。考慮到檔案的更新和文章的靈活性。我將只寫出檔案的主要部分,將省去版本好和更新日期。

gcc-core C 語言編譯器
gcc-c++ C++ 語言編譯器
mingw-runtime MinGW 的執行時庫(這個必須安裝)

win32api

win32 的 API 函式標頭檔案和連線庫

binutils

MinGW 的彙編器和聯結器等基礎工具

gdb

MinGW 中的除錯工具
mingw32-make Make 工具,用以更好的管理你的專案

然後,將上述檔案逐一下載,然後全部解壓縮到一個目錄下就可以了,我這裡假設你是移動到 $(MINGW) 這個目錄下了。這樣,你的 MinGW 就算安裝成功了。

最後到DOS終端上,將當前目錄轉換成 $(MINGW)/bin 下。輸入

C:\>gcc -v

看到一段 gcc 的版本資訊,這就能說明,你的 gcc 已經可以正常工作了。

安裝方案二:

下載以後執行安裝,至於安裝過程,我想我就不一一介紹了。對於 Windows 下的開發人員,我想這個應該不是什麼問題了。 在一切都選擇好以後。這個程式就開始從 Internet 上下載所需要的壓縮包。然後,逐一解開,安裝。

總體來說,兩種方法各有長處。不過,本人偏愛第一中方法。因為,控制度高,而且,更新也比較簡單。自己心裡也比較明瞭。

環境設定:

對於我們這些使用者來說,最好是能夠簡單方便的使用工具。所以,我們就需要設定環境,便於我們使用 MinGW 。

對於設定,我們只需要在環境變數中的PATH 變數中,新增$(MINGW)/bin這個路徑就可以了。

When you install command line tools, such as MinGW, or GnuWin32 tools, you have to tell the command line interpreter where to find them; this is usually accomplished by adding the appropriate directory names to the PATHvariable in your environment. Typically, it isyour responsibility to do this; please do not expect the installer, (if you used one), to do it for you. If you use the GUI installer, it will create a start menu "Shell" shortcut that essentially sets up the path for you–following these instructions allows you to run it from the normal command prompt.

Warning: Adding entries to the PATH is normally benign. However, if you delete, you may mess up your PATH string, and you could seriously compromise the functioning of your computer. Please be careful.

  1. Right-click on "My Computer" and select "Properties".
  2. Click Advanced -> Environment Variables.
  3. In the box entitled "System Variables" scroll down to the line that says "PATH" and double-click the entry.
  4. You will be presented with a dialog box with two text boxes, the bottom text box allows you to edit the PATHvariable. It isvery important that you do not delete the existing values in the PATH string, this will cause all sorts of problems for you!
  5. Scroll to the end of the string and at the end add "; \bin". Here is the full absolute path name of the installation directory; if you accepted the defaults when installing tar and gzip, then for these, it will (probably) be C:\Program Files\GnuWin32, while for MinGW it will be C:\MinGW\bin, (if you kept to the recommended default installation directory). Don’t forget the semicolon; this separates the entries in the PATH.
  6. press OK -> OK -> OK and you are done.

Note that you may can also add C:\MinGW\MSYS\1.0\local\bin, and C:\MinGW\MSYS\1.0\bin to your path as well, if you want to be able to use bundled MSYS executables (replace with full path to your directories).

第三節 人在曹營心在漢的Cygwin

介紹

Cygwin ,其實並不是一個 GCC 。她是讓 Windows 擁有 Unix-like 環境的軟體。所以, GCC 自然也就會包含在裡面。不過,對於開發者, Cygwin 是一個開發環境。而對於使用者來說 Cygwin 是一個執行環境。 Cygwin 唯一和 MinGW 最大的區別在於,使用 Cygwin 可以在 Windows 下呼叫 Unix-like 的系統函式。比如程序函式,等等。所以,雖然說, Cygwin 是執行在 Windows 下的,但是她還是使用的是 Unix-like 系統的函式和思想。

獲得與安裝

在網站上下載 Cygwin 的安裝程式 setup.exe 。然後執行便可以了。 關於前面的設定,我想不用多做介紹了。因為,對於這些我想 Windows 下的開發人員應該相當清楚了。

在到了選擇安裝的元件時,在Devel 選項下,將gcc-core,gcc-g++ 等前的skip 點選成你所需要的版本號。

然後在 Lib選項卡中,將glib2,glib2-devel,glib2-runtime前的skip點成版本號。

接下來,就點選 next 就可以了。在一段漫長的等待時間後,你的 Cygwin 開發環境就算安裝好了。 相對來說, Cygwin 的安裝和配置都比較簡單。因為, Cygwin 提供了一個比較健全的安裝程式。

使用

在安裝目錄下,執行 cygwin.bat 就可以啟動 cygwin 環境了。這是一個模擬 Linux 的環境,所以很多地方可能和 Dos 有比較大的差距。不過,你編譯出的程式可以直接在其他沒有安裝 Cygwin 的機器上執行。還有,如果要切換到 windows 下的其他盤下,比如 D 盤。那麼就可以使用

$cd /cygdrive/d/

對於 Cygwin 更多關於使用的內容,你可以到 Linux 社群去獲得參考。

—————-

1. 先去Cygwin網站(www.cygwin.com)下載一個安裝檔案(setup.exe),這個檔案體積很小,只有不到300KB。然後雙擊執行setup.exe。因為是第一次安裝,所以必須選擇從Internet線上安裝,也可以先從Internet下載安裝檔案,然後再手動安裝。我選擇後者,因為這樣,以後我可以在不聯網的時候也能安裝。

2. 接下來點選“下一步”,然後從一系列伺服器列表中選擇一個你認為網速最快的一個作為下載伺服器。接著點選“下一步”就會出現如下圖所示的介面,用來選擇你想安裝的程式。

如果你不做任何修改,將預設安裝Cygwin執行所需的最少的程式和元件。不過,gcc編譯器不在預設安裝程式之列,所以你必須選擇安裝gcc。具體是, 在上述視窗中的列表中展開Devel目錄,找到gcc-g++一項,點選“Default”,它就變成了“Install”,同時由於程式之間的依賴性 gcc-core條目的“Default”,也變成了“Install”。

此外,為了使gcc能正確編譯原始檔,還必須安裝win32api庫,否則會編譯出錯。因此,你需要在上述視窗中展開Libs目錄,找到win32api一項,將它點成“Install”。

3. 接下來就是耐心等待程式去下載所需的安裝檔案了。一旦下載完畢,你再次執行setup.exe,先選擇你將要把Cygwin安裝在什麼地方,然後再選擇你 剛才所下載的那些安裝檔案所在的硬碟位置。接著你還需要再次選擇安裝gcc和win32api。這樣,你就可以開始安裝了。

4. 安裝完成後,執行Cygwin。在視窗中敲入gcc就可以直接用gcc來編譯了。編譯連結生成的可執行檔案,系統會自動加上.exe字尾,在Cygwin 環境中可以直接執行。但如果脫離Cygwin環境,而在MS DOS下執行,則會出錯。解決辦法很簡單,那就是將cygwin1.dll檔案拷貝到C:\WINDOWS目錄下即可。

第四節 腳踏兩隻船的Djgpp

介紹

Djgpp ,是一個在純 Dos 下的 GCC 移植版本。她使用一些軟體將純 Dos 設定成 32 位的環境,並執行由她編譯出來的程式。總體來說, Djgpp 並不是一個 Windows 的移植版。不過,她確實可以在 Windows 下執行。對於一些特殊應用。 Djgpp 是唯一適合的。

獲得與安裝

不過,這裡 Djgpp 為使用者做了更好多的安排。她為使用者提供了一個定製安裝的頁面。http://www.delorie.com/djgpp/zip-picker.html 您只需要在上面填寫響應的內容,然後遞交。她將會給你一份完整的安裝方案。

使用

相對來說, Djgpp 我並不是經常使用。所以,本文中在沒有特殊說明情況下,不會使用 Djgpp 的。

文外音:

總體來說,這篇文章寫的有些匆忙。所以可能有些地方有不足。所以,希望各位能夠多多原諒批評和指教。下一章,我將介紹GCC for Win32的IDE。同時,從這一章開始,我將向各位讀者做一個小小的要求。那就是,希望你們能夠將自己對這篇文章感到的不足告訴我,我將隨時修改以發表的內容,以適合廣大讀者的要求。如果各位有什麼想法或者意見,疑惑。希望您能到http://blog.csdn.net/visioncat 上提出。

STUDIO軟體開發組(SDT) STUDIO Development Team 北斗星君(黃庠魁)

第二章 GCC的外衣——IDE環境

第一節 IDE for GCC概覽

IDE,即Integrated development environment,也就是綜合開發環境。對於習慣使用VC的windows程式設計師來說,在windows下,GCC的IDE也許就比較陌生了。所以,想通過這一章簡單介紹一下GCC所使用IDE。

GCC的IDE是什麼?

IDE,也就是 綜合開發環境 。她是為了便於程式設計師開發,管理專案的軟體。對於C/C++來說,她主要包括四個部分。程式碼編輯器,編譯聯結器,偵錯程式和工具庫。而GCC本身就包含了編譯聯結器,偵錯程式和工具庫。所以,嚴格的說,GCC的IDE主要功能就是一個程式碼編輯器,是用於編寫程式碼的軟體。

所以,從上面我們可以看到一個問題,那就是支援工具庫的不是IDE,而是編譯器。如果你使用不同的IDE開發專案,只要你使用的編譯器是相同的,那麼她就能支援相同的工具庫。

Windows下的為GCC設計的IDE有那些?

許多GCC的IDE,畢竟不是商業化製作的,因此很多地方都有不足的地方。下面是我個人認為不錯的幾個IDE。

Dev-C++,這個IDE可謂是專門為GCC所設計的IDE。Visual-MinGW,一個模仿VC6.0介面的IDE。最後是最近最火的Code::Blocks,由於也是最近接觸,所以也不是太瞭解,不過,給人的第一印象是,特別像VC.Net的介面。

總體來說,各個IDE都有其自身的特點。對於初學者,Dev-C++比較不錯,因為各種工具庫基本都有為Dev-C++設計的安裝包。對於從VC轉形到GCC的人來說,Visual-MinGW是一個不錯的選擇,因為據我所知,大家熟悉和喜愛的還是VC6.0居多,因此模仿VC的Visual-MinGW是一個不錯的選擇。對於打算用GCC開發專案的人來說,Code::Blocks的確會成為你的最愛,因為她的專案管理實在是太優秀了。其實,每個人都會從中找到適合自己的IDE。

本書的IDE

本書使用哪種IDE呢?其實,本書不是專門為哪種IDE所寫的。因此,本書所寫的都是針對GCC本身所寫的。因此,本書中的IDE。其實就是windows下最不起眼的notepad。不過,為了書寫便捷,我通常使用Emacs或者Notepad++來書寫程式碼。Emacs是一個Unix環境下優秀的編輯軟體,Notepad++是一個notepad增強版,個人感覺比較適合開發程式。本書會在每個例子程式後附帶一個Makefile檔案,通過這個檔案各位就能夠非常直接的瞭解到環境的配置方式,然後根據不同的IDE為你的程式新增不同的引數。

第二節 最專一的Dev-C++

簡介

Dev-C++,全稱Bloodshed Dev-C++,是由Bloodshed公司開發的一款C/C++的IDE。她所預設的編譯器為MinGW,但是她能夠支援Cygwin等其他任何GCC的移植版以及GCC本身。她是使用Delphi開發的,因此有些C/C++開發者覺得她的血統不純。但是我個人認為,只要適合的,我們又何必在意她用什麼開發呢?

獲得與安裝

Dev-C++,可以從她的官方網站 http://www.bloodshed.net 上獲得。在官方網站的下載頁上,你將會看到三個安裝程式。下面我一一解釋一下。

Dev-C++ with Mingw/GCC 這個是包含MinGW的安裝包。安裝這個包以後,你將擁有完整的一個IDE開發環境,自然包括編譯器等。

Dev-C++ executable only 這個是隻有IDE的安裝程式,其中不包括任何編譯器。所有,如果你沒有安裝GCC編譯器的話,安裝這個包以後你將會出現無法編譯專案的問題。

Dev-C++ source code 這個是原始碼包,當然其中只有Dev-C++的程式碼,沒有任何GCC的程式碼。

通常偷懶的人選擇 Dev-C++ with MinGW/GCC 這個包,這個也是我建議初學者安裝的包。如果,你在上一章以後,已經安裝了某個GCC的windows移植版,那麼你可以選擇Dev-C++ executable only這個包。如果你想研究一下Dev-C++的程式碼,並且對Delphi有所瞭解,那麼Dev-C++ source code是你唯一的選擇。

下面我對Dev-C++ executable only的安裝方式進行說明。而Dev-C++ with MinGW/GCC的安裝和她差不多,只是可以省去後面配置編譯器的問題。

安裝

首先,從官方網站下載Dev-C++。執行安裝程式以後,您將看到如下的提示。

這個是讓你選擇安裝時候所使用的語言這裡,我們只能選擇English,因為沒有中文安裝介面。

這個是許可證介面,選擇 I Agree。感覺現在大家用盜版用多了,對於許可證都不關心了,可是我想作為一名開發者,應該對許可證的內容重視一下,畢竟你的軟體也是要被人使用的。

這個是安裝選項介面。其中,你可以選擇你所要安裝的內容和安裝的一些選項,比如是否關聯檔案等。如果你下載的是 Dev-C++ executable only ,那麼你將無法使用Mingw compiler system(binaries,headers and libraries) 這個選項,因為這個安裝檔案中沒有包含這個。

這個介面是讓你選擇安裝路徑。你可以在這裡選擇你安裝Dev-C++的路徑。我這裡假設你安裝在$(DEV)下。

這個介面是詢問你是否為windows上的所有使用者安裝Dev-C++。這裡,我選擇 否。如果你想讓本地機上,每個使用者都可以使用Dev-C++,那麼你可以選擇 是。

在安裝程式結束後,預設會執行Dev-C++。你在首次執行時,會看到如下介面。

這個是選擇你Dev-C++所使用的語言,介面圖示和視窗風格。如圖上選擇,我們使用的語言是中文,使用New Look圖示,並使用XP風格的視窗。

這個是詢問你是否要Dev-C++提供函式補全功能,她將從標頭檔案中讀取函式頭,然後為你補全。但是要消耗一定的CPU時間。如果,你的機器還可以的話,並且需要此功能那麼你可以嘗試一下。

至此,我們的Dev-C++算是安裝成功了。如果,下載的是Dev-C++ with MinGW/GCC,那麼後面的內容你可以不關心了。因為,你的IDE環境已經全都配好了。如果不是,那麼您還需要自己安裝編譯器。

配置編譯器

按照我第一章所介紹的,安裝好某一個GCC移植版編譯器,可以是MinGW,也可以是Cygwin。假設,您安裝的目錄為$(GCC),那麼請將如下路徑新增到系統變數 PATH 後。

$(GCC)\bin;

這樣,你的Dev-C++就擁有了編譯器了。當然,你也可以從Dev-C++的網站上下載MinGW全套的Dev包,然後用Dev-C++帶的包管理程式安裝MinGW。

新增新的工程型別

在平時,我們通常會建立自己的工程檔案。但是,如果每次都要自己設定環境變數,編譯器引數未免也太麻煩了。本處就要介紹,如何將自己定義的工程型別,新增到Dev-C++的新建工程選項裡。就如下圖所示,

Dev-C++的專案模板檔案,儲存在安裝目錄的Templates目錄下。檔案以template字尾結尾,你可以用記事本開啟。下面我們一起來建立一個自己的專案。

在templates目錄下新建一個名為MyProject.template的文字文件。內容如下:

[Template]

ver=1

Name=MyProject

Icon=0

Description=一個小小的測試

Catagory=HOME

[Unit0]

CName=main.c

C=MyProjectC.txt

[Unit1]

CName=myProject.h

C=MyProjectH.txt

[Project]

UnitCount=2

Type=1

IsCpp=0

Compiler=-DPASSWORD

Linker=-O2

Name=My Project

ProjectIon=0

[Template]

標籤後的內容是對專案的介紹。

Ver

變數是Template檔案的版本,這邊預設是1不要更改。

Name

變數是專案的名稱

Icon

變數是專案圖示的路徑,如果沒有那麼就寫0

Description

變數是對這個模板的介紹。

Category

變數是這個專案屬於哪種專案,這裡我們自己建立了一個名為Home的型別。

[Unitx]

其中x為從0開始的任何整數,是定義專案中所包含的檔案。

CName

變數是說明這個檔案在專案儲存時預設的檔名。(C語言時使用)

C

變數是Cname檔案的原始檔。(C語言時使用)

CppName

變數同Cname變數,只是在C++語言時使用。

Cpp

變數同C變數,是在C++語言時使用的。

[Project]

標籤是對工程的總體介紹

UnitCount

變數是說明整個專案有多少檔案,從1開始。

Type

變數是告訴IDE這個專案採用何種編譯方式。0為windows視窗程式,1為控制面板程式,2為靜態連線庫,3為動態連線庫。

IsCpp

變數是說當前專案是否只能使用C++語言,0表示不是,1表示是。

Compiler

變數是編譯器引數

Linker

變數是聯結器引數

Name

變數是專案的名稱

ProjectIcon

變數是專案編譯以後,主程式的圖示檔案。

下面給出了MyProjectC.txt和MyProjectH.txt的內容。

//MyProjectC.txt

#include

#include

#include "myProject.h"

int main(int argc,char *argv[]){

printf("%s\n",S);

return(0);

}

//MyProjectH.txt

#ifdef PASSWORD

#define S "Hello World"

#else

#define S "NO PASSWORD"

#endif

重新啟動Dev-C++,在你的專案中就存在了我們的專案。

最後的內容

相對來說Dev-C++的功能還是比較簡單的。而且,介面也是屬於中文的。所以,慢慢摸索你一定可以熟悉這個環境的。

文外音:

總的來說,Dev-C++是一個不錯的IDE。很適合對GCC不是太瞭解的人使用。當然,這裡我還是要表示抱歉,因為最近要忙於考試,所以遲遲沒有推出這篇文章。現在經歷了漫長的考試時間,我在放假的剛開始,就匆匆寫出了一些,趕緊貼出來。這裡我還是希望各位能提出一件和疑問。如果各位有什麼想法或者意見,疑惑。希望您能到 http://blog.csdn.net/visioncat 上提出。謝謝。

STUDIO軟體開發組(SDT)

STUDIO Development Team

北斗星君(黃庠魁)

第三節 最臉熟的Visual-MinGW

簡介

Visual-MinGW 是一個專門為MinGW所設計的IDE。如果,你曾經用過VC++ 6.0這個IDE,你的第一感覺就是,Visual-MinGW和VC++ 6.0非常相似。所以,對於曾經用慣VC的朋友們來說,Visual-MinGW不失是一個好的選擇。然而,Visual-MinGW的開發與更新似乎並不積極。因此,還有不足的地方。Visual-MinGW的理念是提供一個高效的,快速的建立程式碼的IDE。

獲得與安裝

Visual-MinGW可以從他的官方網站http://visual-mingw.sourceforge.net獲得。在官方網站上,您將看到有Development和Visual-MinGW兩個下載選項。這裡,我只以Visaul-MinGW的下載項為例。Visual-MinGW是一個不包含MinGW編譯器的安裝程式。

安裝

首先,從官方網站下載前面所說的安裝程式,然後執行。基本的安裝步驟和Dev-C++類似。由於沒有什麼選項。我們這裡就不一一舉例了。

接著,我們執行Visual-MinGW。在第一次執行時,我們將看到如下對話方塊。

這是詢問你,是否關聯相關檔案。也就是讓Visual-MinGW成為預設的檔案編輯器。

這個對話方塊是告訴你,需要將MinGW的目錄設定進你的Compiler目錄。

如果,你安裝了MinGW。那麼你在這裡就可以設定了。我假設,你的MinGW安裝在$(MinGW)目錄下。那麼在Compiler Path前打勾,並將$(MinGW)新增上去。

如此,你的Visual-MinGW就算設定好了。如果,你沒有安裝MinGW,那麼你可以檢視第一章的內容。這裡,我就不多做介紹了。

配置

如果,你需要改變編譯器所在的目錄。可以使用如下方法呼叫設定介面。

在選單欄選擇 File -> Preferences.. -> Environment 這樣,你就開啟了設定介面。這裡的設定,和第一次執行的設定一樣。

使用

其實,Visual-MinGW的使用方式和VC非常類似。基本熟悉VC的朋友。一定對Visual-MinGW不會陌生的。所以,在這裡我就不詳細介紹了。不過,可惜的是,Visual-MinGW似乎不能新增自己的專案型別。所以,這也給我們帶來了不少不便。

第四節 最新穎的Code::Blocks

簡介

Code::Blocks不只是GCC的一個IDE,也可以支援其他的編譯器,比如 MS-VC,Borland C++等等。所以,總體來說Code::Blocks並不是某個編譯器的特屬IDE。Code::Blocks的介面設計很像VC.net的介面。從效果上看的確不錯。而且,這個IDE支援外掛功能,你可以從他的官方網站上獲得這個IDE的外掛和相關的幫助。

獲得與安裝

Code::Blocks你可以從他的官方網站 http://www.codeblocks.org獲得。在官方網站上,有兩種版本下載,一種是帶編譯器的,一種是不帶的,我們可以從檔案的體積來分辨這些。這裡,我下載的是不帶編譯器的。當然,帶編譯器的安裝方式也類似。

安裝

在網上下載Code::Blocks後,雙擊執行安裝。

上面是安裝的歡迎介面

這個是Code::Block的許可證介面。這裡,軟體用了GPL,這就說明你可以免費使用和傳播。

這個是詢問你安裝的路徑,你可以選擇自己喜歡的路徑。

這個是詢問你安裝的模式,因為軟體也不大,所以如果你的硬碟空間有空餘的話,就選擇完全模式吧。

這個是安裝前的確認,如果沒有什麼問題的話,他將開始將Code::Block安裝到你的機器上了。

在一系列的安裝後,你將看到如上的介面。提醒你已經安裝好Code::Block了。Launch Code::Block意思是馬上執行Code::Block。

配置

在第一次執行Code::Block時,她會詢問你所使用的編譯器種類。如果不是有特殊要求的話,我這裡選擇GNU GCC Compiler。如果你一開始選錯了也沒有關係。

由於,我們安裝的是沒有編譯器的版本。所以,我們這裡必須安裝編譯器,具體的安裝方式,可以參照前面的文章。這裡,建議安裝MinGW。現在我假設你的編譯器安裝在了,$(MINGW)目錄下。

執行Code::Block,在選單中選擇 Build -> Compiler Options。調出編譯器配置框。

如圖所示,這個就是編譯器選項,我們這裡使用的是GCC所以,在最開始選擇。GNU GCC Compiler。說明你選擇使用的是GCC。

然後選擇Programs選項卡,設定我們MinGW的路徑。

在Compiler’s installation directory中新增你MinGW的路徑,按照上面的定義他應該是$(MINGW)。注意別把bin目錄包含進去。如果你只安裝了C語言編譯器,並且你只使用C語言編譯器。請將Linker for dynamic libs中的mingw32-g++.exe改為mingw32-gcc.exe。

至此,我們已經順利完成Code::Block的安裝與配置了。如果,你選擇的是帶編譯器的版本,那麼你可以忽略配置部分。

使用

總體來說,Code::Block的使用還是比較顯而易見的。對於有一些程式設計經驗的人,使用Code::Block並不是一件非常困難的事情。當然,Code::Block可以建立自己的專案模板。具體的做法和Dev-C++類似。您可以檢視$(CodeBlocks)/share/CodeBlocks/templates目錄中的檔案。

最後的內容:

總體來說,這次介紹的兩個IDE總體來說還是不錯的。不過,筆者使用最多的還是Dev-C++。對於Visual-MinGW和Code::Blocks我瞭解並不多。前者是因為並不太喜歡,後者是由於剛出來。不過,還是希望我寫的內容對各位有用。當然,我個人的喜好不會影響各位的使用。現在筆者沒有使用其中任何一款IDE,筆者現在使用的IDE是我自己架設的,在Windows下我使用的是notepad作為我編寫程式碼的工具,使用Makefile管理專案。所以,各位可以放心的選擇各自喜好的IDE。不用擔心會不被支援,或者被厭棄。至此,關於IDE的介紹將就到這裡結束了。以後我將主要針對函式庫本身做詳細的介紹,並提供教程。

文外音:

首先,對各位讀者表示抱歉。因為原本我準備趁著這次暑假多寫一點東西的。可是,並沒有預期的那麼好。原本這篇文章應該在上個月寫出來的。可是,上個月為了練習程式設計技巧,寫了個Sudoku Puzzle,因此沒能有時間寫文章了。如果各位想要的話,可以問我要。那個程式原本預計一週完成的,可是沒想時間遠遠超出了我的預計。後來,八月初才完成的。本想可以寫了吧,沒想又發起高燒了,結果久久沒能寫出文章,對各位對我的期望,我表示非常抱歉。如果你對於文章有什麼意見,疑惑或者問題,可以到http://blog.csdn.net/visioncat上提出。我盡我所能將在第一時間回答您。

STUDIO軟體開發組(SDT)

STUDIO Development Team

北斗星君(黃庠魁)

第三章 GCC粗探——GCC的組成與附加引數

第一節 GCC的家族成員

總的來說,GCC應該是一個編譯器。可是,為什麼我還要在這裡介紹GCC的家族成員呢?其實,整套的GCC環境並不是由GCC構成的,他是由多個包所組成的。這些包的互相作用產生了GCC的開發環境。其中,有一些包是你開發應用程式所必備的基本包。離開這些包你將無法正常使用GCC。

GCC的基本包列表。

GCC的基本開發環境,主要由一下幾個包構成。Binutils,這個是輔助GCC的工具包,裡面包含了聯結器,彙編器,動態靜態庫生成程式,等等。GCC,這個包是GCC本身。當然GCC包中還包括一下幾個包,如core,java,ada等,每個包都代表了一種語言。然後,就是win32api,mingw-runtime,這個是在Win32下使用的標準函式包。如果,你使用的是Cygwin或者是在Unix環境下,那麼這個包就是GlibC。

所以,由上所述。GCC的基本包有:binutils gcc glibc/[win32api,mingw-runtime]有了這些包。你基本能夠開始編譯應用程式了。

當然,如果說你想要寫一個小程式。自然這些包已經夠了。但是如果你要寫一個較大的工程。那麼,這些包也許就不能很好的勝任你的工作了。因為,對於一個大的專案,需要編譯的檔案不只一個,而且還有依賴關係等等。

所以,GCC中還包括gmake包用於管理專案。當然,還有automake。但是我個人還是不太喜歡automake,automake其實是幫助你自動的管理你的專案,當然實現這個自動也是比較麻煩的,所以與其用automake管理中小型專案,不如用gmake自己寫個指令碼。不過,automake通常用於原始碼釋出的應用,如果在開發時使用會延長開發週期。

Gmake,automake,都是通過編譯指令碼來批量的編譯程式。他們能夠更具你所給定的依賴關係,來自動的判斷需要重新編譯的原始碼,然後編譯。這點的確可以幫助開發人員減輕不少的人力和開發週期。比如,你用Makefile管理一個專案,那麼在你第一次編譯程式以後,如果你的原始碼沒有做過任何編輯,那麼下次再呼叫gmake的程式時,gmake就不會再去一一編譯每個檔案。而是簡單的連線一下主程式,或者什麼都不作的退出(這要取決於你寫的Makefile指令碼)

但是,對於有些開發人員來說,上面這些包還是不能滿足他們的要求。因為他們要除錯程式。所以,GCC還包括另一個包。那就是GDB,gdb是GCC開發的,用於跟蹤除錯的,命令符型偵錯程式。它的功能還是比較強大的。基本,你能在VC下做到的,GDB也可以。不過,GDB的命令還是比較多的。掌握一些基本的除錯命令一般就夠使用了。

總結

GCC開發環境包括如下幾大包。

binary

基本包

提供基本的彙編器,聯結器等

gcc

基本包

各種語言的編譯器,包括C,C++,Ada,Java等

Win32api,mingwi-runtime/glibc

基本包

系統函式庫

Gmake/automake

需要包

管理專案編譯的程式

gdb

附加包

除錯程式

第二節 GCC的常用編譯引數

同VC,TC等編譯器不同,GCC其實是可以很方便的在提示符下編譯程式的。GCC在提示符下編譯程式,並沒有如同VC那樣的冗長而晦澀的編譯引數。相反,卻有著比VC更靈活且簡短的引數。

不得不承認,不懂GCC編譯引數的人,確實會損失一些GCC的強大功能。所以,我下面簡單介紹一下GCC的一些基本編譯引數。這裡,我以C編譯器為例。

編譯二進位制程式碼

$gcc -c yours.c -o yours.o

使用這段指令,GCC將會把yours.c編譯成yours.o的二進位制程式碼。其中,yours.o就類似於VC,TC中的.obj文件。

編譯最簡單的小程式。

$gcc -o yours yours.c

通過這條指令,GCC將會把yours.c原始碼編譯成名為yours的可執行程式。當然,您也可以將yours.c改成我們剛才介紹的yours.o檔案。這樣,gcc將使用編譯剛才編譯好的二進位制文件來連結程式。這裡,格式的特點是,-o 後面是一串檔案列表,第一個引數是所編譯程式的檔名,從第二個開始,就是您編譯和連線該可執行程式所需要的二進位制文件或者原始碼。

編譯時將自己的標頭檔案目錄設為預設標頭檔案目錄

$gcc -I”Your_Include_Files_Document_Path” -c yours.c -o yours.o

這條指令中的-I引數將會把Your_Include_Files_Document_Path新增到你預設的標頭檔案目錄中。這樣您將可以使用 #include 來匯入標頭檔案。

編譯時使用自己的靜態庫存放目錄

$gcc -L”Your_Lib_Files_Document_Path” -o yours yours.o

這條指令將會讓GCC在連線時除了在預設Lib存放目錄中搜索指定的靜態庫以外,還會在Your_Lib_Files_Document_Path中搜索。

編譯時使用靜態連線庫

$gcc -lyour_lib -o yours yours.o

這條指令將會讓GCC在連線時把 libyour_lib.a中您所用到的函式連線到可執行程式中。此處注意,GCC所使用的靜態連線庫是lib*.a格式的。在連線時,只且僅需要提供*的內容就可以了。

編譯時使用優化

$gcc -O2 -c yours.c -o yours.o

使用優化方式編譯程式,其中除了-O2以外,還有-O3 -O1等等。他們代表不同的優化等級。最常用的,是-O2優化。當然,還有針對特殊CPU的優化,這裡就不介紹了。

編譯時顯示所有錯誤和警告資訊

$gcc -Wall -c yours.c -o yours.o

GCC在預設情況下,將對一些如變數申請未使用這樣的問題或者申請了沒有給予初始值的問題忽略。但是,如果使用了-Wall引數,編輯器將列出所有的警告資訊。這樣,您就可以知道您的程式碼中有多少可能會在其他作業系統下出錯的地方了。(用這個指令看看你的程式碼有多少地方寫的不怎麼合適。)

編譯連線時,加入除錯程式碼

$gcc -g -o yours yours.c

正如同VC有debug編譯模式一樣,GCC也有debug模式。添加了-g 引數編譯的可執行程式比普通程式略為大一些,其中添加了一些除錯程式碼。這些程式碼將被gdb所支援。

連線時縮小程式碼體積

$gcc -s -o yours yours.o

這個引數,似乎我沒有在Unix環境下看到過。也不知道具體什麼作用。因為有人說Visual-MinGW生成的程式碼小,於是研究了一下她的編譯引數,發現release模式的編譯引數就加了這一項。貌似編譯後的程式碼的確縮小了很多。

獲得幫助

$gcc –help

這條指令從意思上就能看出,獲得gcc的幫助資訊。如果您有什麼特殊需要,也許這個指令能幫上點小忙。

第三節 如何寫一個簡單的Makefile

說了半天Makefile管理專案,我想現在該說一下如何寫了。其實,Makefile檔案總體還是比較容易寫的,基本只要你會使用命令列,就可以寫Makefile。下面我簡單介紹一下Makefile的構成和書寫。

一個輸出 HelloWorld 的簡單Makefile

all:

echo HelloWorld

這個Makefile程式碼,執行後將在螢幕上列印一個HelloWorld。all其實是類似C程式碼中的main函式。gmake程式將在執行Makefile程式碼時,首先執行此處的程式碼。注意,此處echo前面的是 。GCC對空格很敏感的。

新增依賴項的Makefile

all:depend

@echo I am the main

depend:closeecho

@echo I am the depend

closeecho:

@echo off

這個Makefile程式碼,的作用還是輸出句子。不同的是她添加了幾個指令塊之間的依賴關係。其中all依賴於depend,depend依賴於closeecho。這樣,程式在編譯時將根據指令碼的依賴關係來判斷檔案編譯的先後順序。

執行Makefile

$make -f Makefile

通常情況下,不用-f引數,make程式將在當前目錄下搜尋名為Makefile的檔案作為需要執行的檔案。而使用-f將指定Makefile的檔名。

一個完整的Makefile

all:yours

@echo OK

yours:yours.o

gcc -o yours yours.o

yours.o:yours.c

gcc -c yours.c -o yours.o

更多有關Makefile的詳細內容請查相關資料。

文外音:

的確,發現了。我這個系列的文章進展的並沒有我預期和承諾的那麼快。確實挺讓我感到無奈的。不過,幸好你能夠理解我。總體來說,本文主要是簡單介紹一下GCC的一些基礎。因為我發現有許多讀者對GCC並不是很瞭解。

說來也挺無奈的,最近發現原來周圍有個小人當道。此人姓名我也就隱去了。從去年開始,就常常在和我聊得比較好的幾個女生面前造我的謠。所以,原本應該9月該出來的文章拖延到了9月底。說起這個人,我希望大家要以此人為鑑。不要像他那樣。

這人自稱在硬體方面很行,不過據我所知,他無非就是可以把各種型號的主機板和硬體編號背出來而已。連基本的執行緒程序都搞不清楚。還成天鼓吹32bit的機器是淘汰的機器。不得不承認,這位滿口髒話為人無恥的傢伙的確硬體方面挺不錯的。但是,我還是覺得做技術的人不要太追求表面的東西,不要追求過於超前的東西,同時也更要注意自己的品行道德。

也許是年紀大了,發了一些牢騷。希望各位不要建議。不過,事以至次,我也無力挽回了。

最後感謝各位對我的支援,更感謝那些願意為我效力的朋友們。同時,如果您有什麼問題或者建議,都可以提出來。為了您能及時準確的得到回覆請到http://blog.csdn.net/visioncat上發表你的留言。謝謝

STUDIO軟體開發組(SDT)

STUDIO Development Team

北斗星君(黃庠魁)

第四章 跨平臺影象顯示庫——SDL

第一節 與SDL第一次親密接觸

SDL,也就是 Simple DirectMedia Layer 是一個針對 聲音,鍵盤,滑鼠,遙杆,通過OpenGL的3D以及2D處理的底層跨平臺函式庫。她主要支援的平臺有Linux, Windows, Windows CE, BeOS, MacOS, Mac OS X, FreeBSD, NetBSD, OpenBSD, BSD/OS, Solaris, IRIX, 和QNX. 。當然,還有一些非官方的支援平臺。

總體來說,SDL對於影象的處理效能還是不錯的,而且能在基本不修改程式碼的情況下,能支援多平臺的編譯。這點的確是非常不錯的。如果你想開發什麼跨平臺的遊戲之類的,SDL確實是一個不錯的選擇。其次,SDL是用C寫的,所以也可以得到很多其他語言的支援,主要有Ada, C#, Eiffel, Erlang, Euphoria, Guile, Haskell, Java, Lisp, Lua, ML, Objective C, Pascal, Perl, PHP, Pike, Pliant, Python, Ruby, 和 Smalltalk

SDL的官方網站是 http://www.libsdl.org 我們可以從她的官網上免費獲得其原始碼和編譯成功的庫。其他的還有一些Demo,文件,基於SDL所擴展出來的庫,成功的案例等等很多SDL的資料。

SDL的使用概覽

在正式使用中SDL的易用性也是顯而易見的。通過一些簡單的程式碼便能夠編寫出圖形的顯示程式。而且,SDL的程式設計思想也是很容易理解的。

SDL的程式程式碼主要有四部分組成。她們分別是 初始化階段,程式執行階段,事件等待與處理階段,資源釋放階段。

初始化階段,主要完成程式的初始化工作。如SDL的函式初始化,還有程式自身的一些初始化操作,如視窗的建立,背景色的設定,等等。程式執行階段,主要完成程式中所需要的媒體載入,和顯示等,比如視窗的初始化內容的重新整理等。事件等待與處理階段,主要是用於等待視窗 鍵盤 搖桿 滑鼠等事件然後更具程式所設定的進行相關的操作處理。資源釋放階段,主要用於釋放程式中所用到的系統資源,如image圖片資源的釋放等。

這四個階段的程式碼是非常容易實現,而且有一定的格式和方法。所以,相對來說雖然SDL的功能強大,但是程式碼的編寫也還是比較清晰和簡便的。

SDL庫的編譯與安裝

SDL的安裝分為兩種,一種為從原始碼編譯出庫,然後安裝。另一種是直接使用官網上為我們編譯好的SDL庫。下面我一一介紹不同的安裝方式。

我們先來看看從原始碼編譯安裝的過程。

我們要從SDL的官方網站下載 SDL-1.2.x.tar.gz 。然後從MinGW的官方網站上下載MSYS-1.0.10.exe和msysDTK-1.0.1.exe。第一個為SDL的原始碼,第二個和第三個為MinGW的POSIX介面。如果你準備在Cygwin下編譯,那麼第二,第三個包就不需要下載安裝了。

解壓縮原始碼包到一個目錄下,然後開啟你的SH,切換到你SDL原始碼所儲存的目錄下。然後輸入如下的一組命令。

$./configure

$make

上面兩條指令就讓你的GCC編譯出了SDL。如果你使用的是MinGW,那麼可以將include,lib,bin目錄複製出來。這裡我假設我們複製到 $(SDL) 目錄中。如果你使用的是Cygwin,那麼你需要輸入如下命令讓Cygwin自動安裝。

$make install

當然,MinGW也是可以通過這種方式安裝的。這樣,SDL將安裝入MinGW的MSYS安裝目錄中。

你也可以從官方網站上下載已經編譯好的開發庫。所要是SDL的開發庫 SDL-devel-1.2.x-mingw32.tar.gz。將開發包裡的東西解壓縮到 $(SDL)目錄中。

通過以上兩種方式,我們就已經將SDL的開發環境正常安裝到我們的機器上了。

當然,最後別忘記把SDL.dll這個檔案複製到系統目錄下,或者放在環境變數PATH所指向的一個目錄中,亦或是你主程式所在的目錄下。這樣你的SDL程式才可以正常執行。

一個簡單的SDL例子

下面給出一個SDL例子程式的原始碼,以及他的Makefile檔案,我們可以從Makefile檔案中很直觀的看到編譯程式所需要的引數。

下面是C的例子程式碼

//main.c

#include

#include

#include

int main(int argc, char *argv[]){

SDL_Surface *screen;

SDL_Event event;

int isRun=1;

SDL_Init(SDL_INIT_VIDEO);

screen=SDL_SetVideoMode(640, 480, 16, SDL_SWSURFACE);

SDL_Flip(screen);

while(isRun){

SDL_WaitEvent(&event);

switch (event.type){

case SDL_QUIT:

isRun=0;

break;

}

}

SDL_FreeSurface(screen);

return(0);

}

下面是Makefile檔案。

#Makefile

SDL_INCLUDE=$(SDL)/include

SDL_LIB=$(SDL)/lib/

all:

gcc -I$(SDL_INCLUDE) -c main.c -o main.o

gcc -L$(SDL_LIB) -o main main.o -lmingw32 -lSDLmain -lSDL

你所雙擊執行你所編譯出來的程式,你將會看到一個類似於如下圖所示的視窗。

上面那組程式碼的結構就是一個比較典型的SDL的程式碼格式。

初始化階段

SDL_Surface *screen;

SDL_Event event;

int isRun=1;

SDL_Init(SDL_INIT_VIDEO);

程式執行階段

screen=SDL_SetVideoMode(640, 480, 16, SDL_SWSURFACE);

SDL_Flip(screen);

事件等待與處理階段

while(isRun){

SDL_WaitEvent(&event);

switch (event.type){

case SDL_QUIT:

isRun=0;

break;

}

}

資源釋放階段

SDL_FreeSurface(screen);

至此,我們有關SDL庫的簡單介紹就到這裡了。其實,SDL還有很多東西。我們將在後面的章節詳細介紹SDL的神氣功能。

文外音:

感覺自從上一篇文章至今已經過去很久了。其實最近感覺蠻忙的吧。但我也不知道自己忙點什麼。不過這些日子所經歷的事情也很多,感悟也很多。但是,心情卻被這些事情弄的很不好。也許正像我所說的,光來到世界,世界卻因為黑暗不來接受光,反而棄絕光。可如今作為一個普通人的我又能怎麼樣呢?爭取我所愛的?還是等待所愛的?我向來不喜歡和人爭,總認為該是我的,總會是我的,不該是我的怎麼努力也是無用的。可是如今我卻覺得也許我錯了吧。呵呵,不遊戲,不抽菸,不喝酒的我看來真的只適合搞搞技術什麼的吧。

最後還是感謝各位一直以來的支援。同時,如果您有任何的問題和建議都可以提出來。為了您能及時準確的獲得回覆,請到http://nirvana.cublog.cn上,或者http://blog.csdn.net/visioncat上發表你的留言。謝謝。當然,還要為我那麼長時間沒來更新表示歉意。

NERVE軟體開發組(NDT)

NERVE Development Team

北斗星君(黃庠魁)

第四章跨平臺圖象顯示庫——SDL

第二節函式庫的詳細介紹——基本函式

在上一節中,我們已經瞭解了SDL的安裝和基本的使用方法。還給出了編譯使用SDL程式的原始碼。接下來,我將帶領各位深入SDL其中,逐一介紹SDL的各個函式。首先我們先從基本函式說起。

當你需要在你的程式中使用SDL的時候。你首先要做的事情,就是在你的程式中初始化SDL。這個工作,你可以交由SDL_Init函式來做。SDL_Init函式可以初始化任何SDL所支援的子系統,其中包括圖象,聲音,搖桿,時鐘等子系統。當然,在你使用SDL_Init函式初始化以後,你可以使用SDL_InitSubSystem和SDL_QuitSubSystem函式來載入和解除安裝子系統的。當然啦,你的程式退出前,你必須解除安裝所有的子系統以釋放系統資源。通過呼叫< /font>SDL_Quit,可以輕鬆的解除安裝掉你所載入的子系統並釋放這些子系統的系統資源。

SDL_Init

函式摘要 #include“SDL.h” intSDL_Init(Uint32 flags);

函式介紹 這個函式是用於初始化SDL的,你必須在呼叫其他的SDL函式之前呼叫該函式。其中flags的引數和意義如下。當你需要初始化多個子系統的時候,可以用把這些引數或起來。

< /tbody>

SDL_INIT_TIMER

始化 計時器子系統

SDL_INIT_AUDIO

始化 音訊子系統

SDL_INIT_VIDEO

始化 視訊子系統

SDL_INIT_CDROM

始化 光碟機子系統

SDL_INIT_JOYSTICK

始化 搖桿子系統

SDL_INIT_EVERYTHING

初始化以上全部的子系統

返回值說明 返回 -1表示錯誤,返回 0表示初始化成功。

SDL_InitSubSystem

函式摘要 #include“SDL.h” intSDL_InitSubSystem(Uint32 flags);

函式介紹 在你通過 SDL_Init為SDL初始化以後,你可以通過SDL_InitSubSystem函式來初始化那些沒有被初始化的子系統。其中flags的引數定義和 SDL_Init的一樣。

返回值說明 返回 -1表示錯誤,返回 0表示初始化成功。

SDL_QuitSubSytem

函式摘要 #include“SDL.h” voidSDL_QuitSubSystem(Uint32 flags);

函式介紹 SDL_QuitSubSystem函式可以解除安裝你曾經通過 SDL_Init或者 SDL_InitSubSytem函式載入的子系統,其中引數 flasgs的定義和 SDL_Init中的定義一樣。

SDL_Quit

函式摘要 #include“SDL.h” voidSDL_Quit(void);

函式介紹 SDL_Quit函式可以解除安裝所有你所載入的子系統,並且釋放這些子系統所佔用的資源。這個函式一般是在程式退出以前呼叫的。< /font>

SDL_WasInit

函式摘要 #include“SDL.h” Uint32SDL_WasInit(Uint32 flags);

函式介紹 SDL_WasInit函式,允許你檢視你所載入的子系統有哪些。其中flags的內容為你所要檢查的子系統。

返回值說明 函式返回一組你所要檢查的子系統載入情況的說明。是幾個bit字的或。你可以用與操作來逐一檢查你所要檢查的子系統是否被載入。

下面給出一組關於以上函式的Demo程式碼,以及他的Makefile。

SDL_General_Demo.c的C程式碼

& nbsp;

//NERVE Development Team //SDL_General_Demo.c

#include  #include  #include

#define NOTE(msg) printf("NOTE: %s\n",msg)

int main(int argc,char *argv[]){ SDL_Init(SDL_INIT_VIDEO); NOTE("load video subSystem");

SDL_InitSubSystem(SDL_INIT_AUDIO); NOTE("load audio subSystem");

if(SDL_WasInit(SDL_INIT_EVERYTHING)&SDL_INIT_AUDIO){ NOTE("AUDIO SubSystem was loaded"); }else{ NOTE("AUDIO SubSystem is unloaded"); }

SDL_QuitSubSystem(SDL_INIT_VIDEO); NOTE("unload video subsystem");

if(SDL_WasInit(SDL_INIT_VIDEO)){ NOTE("VIDEO SubSystem was loaded"); }else{ NOTE("VIDEO SubSystem is unloaded"); }

SDL_Quit(); NOTE("unload any subsystem of SDL");

return(0);

}

編譯SDL_General_Demo.c的Makefile檔案。

& nbsp;

#Makefile CC=gcc SDL_INCLUDE="D:/SDL/include" SDL_LIB="D:/SDL/lib" all:SDL_General_Demo.o $(CC) -L$(SDL_LIB) -o Demo SDL_General_Demo.o -lmingw32 -lSDLmain -lSDL SDL_General_Demo.o:SDL_General_Demo.c $(CC) -I$(SDL_INCLUDE) -c SDL_General_Demo.c -o SDL_General_Demo.o

按照以上兩個檔案的編譯,我們可以得到一個名為Demo的可執行程式。當你執行 Demo以後。你將在Demo所在的資料夾內找到一個名為stdout.txt的檔案。他是對 標準輸入輸出的復位向檔案,你使用printf列印到終端的內容全部儲存在這個檔案內。下面是我的stdout.txt的內容

NOTE: load video subSystem NOTE: load audio subSystem NOTE: AUDIO SubSystem was loaded NOTE: unload video subsystem NOTE: VIDEO SubSystem is unloaded NOTE: unload any subsystem of SDL

文外音:

感覺現在的文章更新間隔是越來越長了,不過還是感謝各位對我的支援。我相信,我以後的文章更新會慢慢的加快節奏的。也同時感謝各位讀者的支援和理解。呵呵,感覺一個學期又結束了,雖然在學期的結尾的時候和某個人發生了些不快。但是,我想我還是大度一點不和他計較了。同時我也覺得,人生中有很多事情是強求不來的,我們的一切都是早已在我們誕生以先就已經定下了,不論是我們在世上的疆界還是我們的財富。在上一階段的時間裡,我曾經充滿希望,也曾經絕望過,但是不論何時我都覺得有種無形的力量在我絕望的時候扶助我,讓我不至全然的撲到在地。如今,我真正覺得我曾經的絕望是如此可笑無知,因他讓我見著希望~。所以,不論我們當前的處境如何絕望,只要抱著信心走在正直的道路上,我相信我們一定能看到曙光的。 如果你在閱讀本文以後有任何的疑問,你可以到http://nirvana.cublog.cn或者 http://blog.csdn.net/visioncat上提出問題。最後感謝各位對我長久以來的支援。

NERVE軟體開發組(NDT) NERVEDevelopment Team 北斗星君(黃庠魁)