[Linux]GCC編譯選項

gcc/g++在執行編譯工作的時候,總共需要4步
1.預處理,生成.i的文件[預處理器cpp]
2.將預處理後的文件不轉換成彙編語言,生成文件.s[編譯器egcs]
3.有彙編變爲目標代碼(機器代碼)生成.o的文件[彙編器as]
4.連接目標代碼,生成可執行程序[鏈接器ld]
參數詳解
-c 只激活預處理,編譯,和彙編,也就是他只把程序做成obj文件   
eg: gcc -c hello.c 生成.o的obj文件
-o 制定目標名稱,缺省的時候,gcc 編譯出來的文件是a.out
eg:gcc -o hello.exe hello.c 
gcc -o hello.asm -S hello.c
–D 允許從編譯程序命令行定義宏符號
一共有兩種情況:一種是用-DMACRO,相當於在程序中使用#define MACRO,另一種是用-DMACRO=A,相當於程序中的#define MACRO A.
eg:如對下面這段代碼:
#ifdefine DEBUG
printf("debug message/n");
#endif
編譯時可加上-DDEBUG參數,執行程序則打印出編譯信息
-Umacro   相當於C語言中的#undef macro
-undef   取消對任何非標準宏的定義
-g
指明編譯程序在編譯的輸出中應產生調試信息.這個調試信息使源代碼和變量名引用在調試程序中或者當程序異常退出後在分析core文件時可被使用.
-gstabs   此選項以stabs格式聲稱調試信息,但是不包括gdb調試信息.   
-gstabs+  此選項以stabs格式聲稱調試信息,並且包含僅供gdb使用的額外調試信息. -ggdb    此選項將盡可能的生成gdb的可以使用的調試信息.
-Wall 以最高級別使用GNU編譯程序,專門用於顯示警告用!!
eg:gcc -Wall hello.c
-I dir   
在 你是用#include"file"的時候,gcc/g++會先在當前目錄查找你所制定的頭文件,如 果沒有找到,他回到缺省的頭文件目錄找,如果使用-I制定了目錄,他回先在你所制定的目錄查找,然後再按常規的順序去找. 對於#include,gcc/g++會到-I制定的目錄查找,查找不到,然後將到系統的缺 省的頭文件目錄查找
eg:gcc -c -I/usr/local/include -I/opt/include hello.c 此時目錄搜索會按給出的次序進行.
-I-  就是取消前一個參數的功能,所以一般在-Idir之後使用
-idirafter dir   在-I的目錄裏面查找失敗,到這個目錄裏面查找
-iprefix prefix -iwithprefix dir
一般一起使用,當-I的目錄查找失敗,會到prefix+dir下查找
-nostdinc
使編譯器不再系統缺省的頭文件目錄裏面找頭文件,一般和-I聯合使用,明確限定頭文件的位置
-nostdin C++
規定不在g++指定的標準路經中搜索,但仍在其他路徑中搜索,.此選項在創libg++庫使用
-S 只激活預處理和編譯,就是指把文件編譯成爲彙編代碼。   
eg:gcc -S hello.c 生成.s的彙編代碼,你可以用文本編輯器查看
-E
只 激活預處理,這個不生成文件,你需要把它重定向到一個輸出文件裏面. 這個選項是相對標準的,它允許修改命令行以使編譯程序把預先處理的C文件發到標準輸出,而不實際編譯代碼.在查看C預處理僞指令和C宏時,這是很有用的. 可能的編譯輸出可重新定向到一個文件,然後用編輯程序來分析:
eg: gcc -c -E hello.c >cpp.out
此命令使include文件和程序被預先處理並重定向到文件cpp.out.以後可以用編輯程序或者分頁命令分析這個文件,並確定最終的C語言代碼看起來如何.
gcc -E hello.c > pianoapan.txt   
gcc -E hello.c | more 可以用來去掉文件中的註釋
-pipe 使用管道代替編譯中臨時文件,在使用非GNU彙編工具的時候,可能有些問題
eg:gcc -pipe -o hello.exe hello.c
-C
在預處理的時候,不刪除註釋信息,一般和-E使用,有時候分析程序,用這個很方便的
-M
生成文件關聯的信息。包含目標文件所依賴的所有源代碼你可以用gcc -M hello.c 來測試一下,很簡單。
-MM 和上面的那個一樣,但是它將忽略由#include造成的依賴關係。   
-MD   和-M相同,但是輸出將導入到.d的文件裏面   
-MMD 和-MM相同,但是輸出將導入到.d的文件裏面   
-Wa,option  
此選項傳遞option給彙編程序;如果option中間有逗號,就將option分成多個選項,然 後傳遞給會彙編程序   
-Wl.option
此選項傳遞option給連接程序;如果option中間有逗號,就將option分成多個選項,然 後傳遞給會連接程序.   
-Ldir指定連接庫的搜索目錄,制定編譯的時候,搜索庫的路徑。比如你自己的庫,可以用它制定目錄,不然編譯器將只在標準庫的目錄找。這個dir就是目錄的名稱。
-llibrary指定連接庫的名字

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章