http://tigcc.ticalc.org/doc/comopts.html
原文出處: http://www.ruchee.com/code/linux/gnu/gcc.html
常用選項
-E:只進行預先處理,不編譯
-S:只編譯,不彙編
-c:只編譯、彙編,不連結
-g:包含調試資訊
-I:指定include包含檔案的搜尋目錄
-o:輸出成指定檔案名稱
進階選項
-v:詳細輸出編譯過程中所採用的每一個選項
-C:預先處理時保留注釋資訊
-ggdb:在可執行檔中包含可供GDB使用的調試資訊
-fverbose-asm:在編譯成組合語言時,把C變數的名稱作為組合語言中的注釋
-save-temps:自動輸出預先處理檔案、彙編檔案、對象檔案,編譯正常進行
-fsyntax-only:只測試源檔案文法是否正確,不會進行任何編譯操作
-ffreestanding:編譯成獨立程式,而非宿主程式
語言標準
-ansi:ANSI標準
-std=c99:C99標準
-std=gnu89:ISO/IEC 9899:1990 以及GNU擴充
-std=gnu99:ISO/IEC 9899:1999 以及GNU擴充
-trigraphs:支援ISO C三字元組
出錯提示
-w:忽略所有警告
-Werror:不區分警告和錯誤,遇到任何警告都停止編譯
-Wall:開啟大部分警告提示
-Wshadow:某語句塊範圍變數與更大範圍的另一變數同名時發出警告(此警告未包含在-Wall選項中,需單獨開啟)
-Wextra:對所有合法但值得懷疑的運算式發出警告
最佳化選項
-O0:關閉所有最佳化選項
-O1:第一層級最佳化,使用此選項可使可執行檔更小、運行更快,並不會增加太多編譯時間,可以簡寫為-O
-O2:第二層級最佳化,採用了幾乎所有的最佳化技術,使用此選項會延長編譯時間
-O3:第三層級最佳化,在-O2的基礎上增加了產生inline函數、使用寄存器等最佳化技術
-Os:此選項類似於-O2,作用是最佳化所佔用的空間,但不會進行效能最佳化,常用於產生最終版本
自訂副檔名
-x:使用此選項可以指定自訂的源副檔名,類型有c、c-header、cpp-output、assembler、assembler-with-cpp、none
凡-x後面所列的所有檔案都會被視為其指定的類型,要想改變類型可以再一次使用-x選項,或者使用-x none回到預設設定
樣本:gcc -o test test.c -x assembler test.asm -x c test2.c
靜態庫的建立和使用
以建立靜態庫static_lib.a為例
- 編寫C源檔案
static_lib.c,其中寫入需要重複調用的函數,然後使用命令gcc -c static_lib.c產生目標檔案static_lib.o
- 使用
ar工具建立靜態庫,命令格式:ar rcs static_lib.a static_lib.o
- 編寫C標頭檔
static_lib.h,其中寫入這些函數的原型聲明
- 編寫主函數
app.c,引入標頭檔static_lib.h,這樣就可以正常使用那些自訂的可複用函數了
- 使用命令
gcc app.c -static ./static_lib.a -o app編譯產生可執行檔app
動態庫的建立和使用
以建立動態庫share_lib.so為例
- 編寫C源檔案
share_lib.c,寫入需要重複調用的函數,然後使用命令gcc -shared -fPIC -o share_lib.so share_lib.c產生動態庫檔案share_lib.so
- 編寫C標頭檔
share_lib.h,寫入函數的原型聲明
- 編寫主函數
app.c,引入標頭檔share_lib.h,然後就可以調用在動態庫中自訂的函數了
- 使用命令
gcc app.c ./share_lib.so -o app編譯產生可執行檔app