天天看點

GCC常用指令選項

(利用GCC生成可執行檔案的處理過程大緻為:GCC需要調用預處理程式cpp,由它負責展開在源檔案中定義的宏,并向其中插入"#include"語句所包含的内容;接着,GCC會調用as将處理後的源代碼編譯成目标代碼;最後,GCC會調用連結程式ld,把生成的目标代碼連結成一個可執行程式。)

-E

使用-E選項可以讓GCC停止在預處理完成階段(完成所有#define,#if,#include等替換),輸出到标準輸出,除非指定-o選項,gcc不再做更多的處理。可使用-o選項生成一個以i結尾的檔案(GCC預設将.i檔案看成是預處理後的C語言源代碼)   -S

停止在彙編階段,輸出.s(彙編語言源碼)但不調用as   -c                

停止在連接配接階段,輸出.o但不調用ld   -o FILE                

指定輸出檔案名。-o選項不是産生可執行二進制代碼的關鍵選項,它隻是為gcc的輸出給出一個檔案名   -DFOO=BAR        

在指令行定義預處理宏FOO,其值為BAR   -IDIRNAME        

将DIRNAME加入到頭檔案的搜尋目錄清單中   -LDIRNAME        

将DIRNAME加入到庫檔案的搜尋目錄清單中,預設情況下gcc 隻連結共享庫   -static                

連結靜态庫,即執行靜态連結,預設情況下,GCC在連結時優先使用動态連結庫   -lFOO                

連結名為libFOO的函數庫   -g                

GCC在産生調試符号時,同樣采用了分級的思路,開發人員可以通過在-g選項後附加數字1、2或3來指定在代碼中加入調試資訊 的多少。預設的級别是2(-g2),此時産生的調試資訊包括擴充的符号表、行号、局部或外部變量資訊。級别3(-g3)包含級别2中的所有調試資訊,以及源代碼中定義的宏。級别1(-g1)不包含局部變量和與行号有關的調試資訊,是以隻能夠用于回溯跟蹤和堆棧轉儲之用。回溯跟蹤指的是監視程式在運作過程中的函數調用曆史,堆棧轉儲則是一種以原始的十六進制格式儲存程式執行環境的方法,兩者都是經常用到的調試手段   -ggdb                

在可執行程式中包含隻有GNU debugger才能使别的達兩條是資訊   -On(n=1,2,3)                

使用編譯選項-On來控制優化代碼的生成,其中n是一個代表優化級别的整數。通常來說,數字越大優化的等級越高,同時也就意味着程式的運作速度越快。在linux下一般使用-O2選項,因為它在優化長度、編譯時間和代碼大小之間,取得了一個比較理想的平衡點   -ansi                

支援ANSI/ISO C的标準文法,取消GNU的文法擴充中與該标準有沖突的部分

(但這一選項并不能保證生成ANSI相容的代碼)   -pedantic        

允許發出ANSI/ISO C标準所列出的所有警告   -pedantic -errors        

允許發出ANSI/ISO C标準所列出的所有錯誤   -traditional        支援Kernighan & Ritchie C文法(如用舊式文法定義函數)   -w                 

關閉所有警告,建議不要使用此項   -Wall                

允許發出gcc能提供的所有有用的警告,也可以用-W(warning)來标記指定的警告   -werror                

把所有警告轉換為錯誤,以在警告發生時中止編譯程                               -MM                

輸出一個make相容的相關清單   -x language

指定程式設計語言language,如C,C++,Java,Ada,F77,Assembler等   -v                

顯示在編譯過程的每一步中用到的指令   更詳細内容,請參見man gcc.