GCC for Win32開發環境介紹(1)
第一章 在視窗操作系統下的GCC
第一節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借助于他的特性,具有了交叉編譯器的功能,即在一個平臺下編譯另一個平臺的代碼。
如今,在Windows下比較流行的GCC移植版主要有三個。他們是MinGW,Cygwin和Djgpp。雖然,Djgpp是應用于DOS系統的,考慮到windows對DOS的兼容,所以也將Djgpp納入其中了。
第二節 入鄉隨俗的MinGW
MinGW是Minimalistic GNU for Windows的縮寫。她是一個建立在GCC和binutils項目上的編譯器系統。和其他GCC的移植版相比,她可以說是最接近Win32的一個了。因為,MinGW幾乎支持所有的Win32API,這也是MinGW的特色之一。她所連接的程序,不需要任何第三方庫就可以運行了。在某種程度上看,MinGW更像是VC的替代品。
MinGW可以從MinGW的官方網站http://www.mingw.org上獲得。
首先,你要從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工具,用以更好的管理你的項目 |
最后到DOS終端上,將當前目錄轉換成$(MINGW)/bin 下。輸入
C:/>gcc -v |
你可以從http://www.mingw.org/download.shtml上下載 MinGW5.0.2.exe這個程序。至少,在我寫此文的時候,這個是最新版本。
對于設置,我們只需要在環境變量中的PATH變量中,添加$(MINGW)/bin這個路徑就可以了。
第三節 人在曹營心在漢的Cygwin
Cygwin可以從Cygwin的官方網站獲得安裝程序http://www.cygwin.com/
在到了選擇安裝的組件時,在Devel選項下,將gcc-core,gcc-g++等前的skip點擊成你所需要的版本號。
然后在Lib選項卡中,將glib2,glib2-devel,glib2-runtime前的skip點成版本號。
$cd /cygdrive/d/ |
第四節 腳踏兩只船的Djgpp
Djgpp,可以從Djgpp的官方網站上下載http://www.delorie.com/djgpp/
總體來說,這篇文章寫的有些匆忙。所以可能有些地方有不足。所以,希望各位能夠多多原諒批評和指教。下一章,我將介紹GCC for Win32的IDE。同時,從這一章開始,我將向各位讀者做一個小小的要求。那就是,希望你們能夠將自己對這篇文章感到的不足告訴我,我將隨時修改以發表的內容,以適合廣大讀者的要求。如果各位有什么想法或者意見,疑惑。希望您能到http://blog.csdn.net/visioncat上提出。
上文回顧:
在上文中,我們了解的windows下的GCC編譯器。這一章我們將來看IDE的介紹了。在此,我還要為各位表示抱歉,因為那么久才寫出這篇文章。
GCC for Win32開發環境介紹(2)
第二章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 <stdio.h> #include <stdlib.h> #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上提出。謝謝。
上文回顧:
在上一篇文章中,我們了解的IDE和Dev-C++。這篇文章中,我將帶領各位繼續我們的IDE之旅。繼續介紹Visual-MinGW和Code::Blocks。希望這些IDE能給各位在工作和學習中帶來便利。
GCC for Win32開發環境介紹(3)
(第二章GCC的外衣——IDE環境)
第三節 最臉熟的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上提出。我盡我所能將在第一時間回答您。
上文回顧:
在上一篇文章中,我主要為大家介紹了有關IDE方面的內容。其中主要包括一些我個人比較喜歡的三個IDE。本文,我將為各位介紹GCC的編譯參數以及組成和Makefile的使用方式。
GCC for Win32開發環境介紹(4)
第三章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 <your_include.h>來導入頭文件。
編譯時使用自己的靜態庫存放目錄
$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前面的是<tab>。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上發表你的留言。謝謝