GCC編譯選項
GCC編譯選項如下表所示:
命令 | 描述 |
---|---|
-l library -llibrary |
進行連結時搜尋名為library的動態連線庫。 例子:如果要搜尋名為libxml.so的動態連線庫,則命令 :$ gcc test.c -lxml -o test |
-Idir | 把dir加入到搜尋標頭檔案的路徑列表中。 例子: $ gcc test.c -I../inc -o test |
-Ldir | 把dir加入到搜尋庫檔案的路徑列表中。 例子: $ gcc -I/home/foo -L/home/foo -ltest test.c -o test |
-Dname | 預定義一個名為name的巨集,值為1。 例子: $ gcc -DTEST_CONFIG test.c -o test |
-Dname=definition | 預定義名為name,值為definition的巨集。 |
-ggdb -ggdblevel |
為偵錯程式 gdb 生成除錯資訊。level可以為1,2,3,預設值為2。 |
-g -glevel |
生成作業系統本地格式的除錯資訊。-g 和 -ggdb 並不太相同, -g 會生成 gdb 之外的資訊。level取值同上。 |
-s | 去除可執行檔案中的符號表和重定位資訊。用於減小可執行檔案的大小。 |
-M | 告訴前處理器輸出一個適合make的規則,用於描述各目標檔案的依賴關係。對於每個 原始檔,前處理器輸出 一個make規則,該規則的目標項(target)是原始檔對應的目標檔名,依賴項(dependency)是原始檔中 `#include引用的所有檔案。生成的規則可 以是單行,但如果太長,就用`/'-換行符續成多行。規則 顯示在標準輸出,不產生預處理過的C程式。 |
-C | 告訴前處理器不要丟棄註釋。配合`-E'選項使用。 |
-P | 告訴前處理器不要產生`#line'命令。配合`-E'選項使用。 |
-static | 在支援動態連結的系統上,阻止連線共享庫。該選項在其它系統上無效。 |
-nostdlib | 不連線系統標準啟動檔案和標準庫檔案,只把指定的檔案傳遞給聯結器。 |
Warnings | |
-Wall | 會開啟一些很有用的警告選項,建議編譯時加此選項。 |
-W -Wextra |
列印一些額外的警告資訊。 |
-w | 禁止顯示所有警告資訊。 |
-Wshadow | 當一個區域性變數遮蓋住了另一個區域性變數,或者全域性變數時,給出警告。很有用的選項,建議開啟。 -Wall 並不會開啟此項。 |
-Wpointer-arith | 對函式指標或者void *型別的指標進行算術操作時給出警告。也很有用。 -Wall 並不會開啟此項。 |
-Wcast-qual | 當強制轉化丟掉了型別修飾符時給出警告。 -Wall 並不會開啟此項。 |
-Waggregate-return | 如果定義或呼叫了返回結構體或聯合體的函式,編譯器就發出警告。 |
-Winline | 無論是宣告為 inline 或者是指定了-finline-functions 選項,如果某函式不能內聯,編譯器都將發出警告。如果你的程式碼含有很多 inline 函式的話,這是很有用的選項。 |
-Werror | 把警告當作錯誤。出現任何警告就放棄編譯。 |
-Wunreachable-code | 如果編譯器探測到永遠不會執行到的程式碼,就給出警告。也是比較有用的選項。 |
-Wcast-align | 一旦某個指標型別強制轉換導致目標所需的地址對齊增加時,編譯器就發出警告。 |
-Wundef | 當一個沒有定義的符號出現在 #if 中時,給出警告。 |
-Wredundant-decls | 如果在同一個可見域內某定義多次宣告,編譯器就發出警告,即使這些重複宣告有效並且毫無差別。 |
Optimization | |
-O0 | 禁止編譯器進行優化。預設為此項。 |
-O -O1 |
嘗試優化編譯時間和可執行檔案大小。 |
-O2 | 更多的優化,會嘗試幾乎全部的優化功能,但不會進行“空間換時間”的優化方法。 |
-O3 | 在 -O2 的基礎上再開啟一些優化選項:-finline-functions, -funswitch-loops 和 -fgcse-after-reload 。 |
-Os | 對生成檔案大小進行優化。它會開啟 -O2 開的全部選項,除了會那些增加檔案大小的。 |
-finline-functions | 把所有簡單的函式內聯進呼叫者。編譯器會探索式地決定哪些函式足夠簡單,值得做這種內聯。 |
-fstrict-aliasing | 施加最強的別名規則(aliasing rules)。 |
Standard | |
-ansi | 支援符合ANSI標準的C程式。這樣就會關閉GNU C中某些不相容ANSI C的特性。 |
-std=c89 -iso9899:1990 |
指明使用標準 ISO C90 作為標準來編譯程式。 |
-std=c99 -std=iso9899:1999 |
指明使用標準 ISO C99 作為標準來編譯程式。 |
-std=c++98 | 指明使用標準 C++98 作為標準來編譯程式。 |
-std=gnu9x -std=gnu99 |
使用 ISO C99 再加上 GNU 的一些擴充套件。 |
-fno-asm | 不把asm, inline或typeof當作關鍵字,因此這些詞可以用做識別符號。用 __asm__, __inline__和__typeof__能夠替代它們。 `-ansi' 隱含宣告瞭`-fno-asm'。 |
-fgnu89-inline | 告訴編譯器在 C99 模式下看到 inline 函式時使用傳統的 GNU 句法。 |
C options | |
-fsigned-char -funsigned-char |
把char定義為有/無符號型別,如同signed char/unsigned char。 |
-traditional | 嘗試支援傳統C編譯器的某些方面。詳見GNU C手冊。 |
-fno-builtin -fno-builtin-function |
不接受沒有 __builtin_ 字首的函式作為內建函式。 |
-trigraphs | 支援ANSI C的三聯符( trigraphs)。`-ansi'選項隱含宣告瞭此選項。 |
-fsigned-bitfields -funsigned-bitfields |
如果沒有明確宣告`signed'或`unsigned'修飾符,這些選項用來定義有符號位域或無符號位域。預設情況下,位域是有符號的,因為它們繼承的基本整數型別,如int,是有符號數。 |
-Wstrict-prototypes | 如果函式的宣告或定義沒有指出引數型別,編譯器就發出警告。很有用的警告。 |
-Wmissing-prototypes | 如果沒有預先宣告就定義了全域性函式,編譯器就發出警告。即使函式定義自身提供了函式原形也會產生這個警告。這個選項 的目的是檢查沒有在標頭檔案中宣告的全域性函式。 |
-Wnested-externs | 如果某extern宣告出現在函式內部,編譯器就發出警告。 |
C++ options | |
-ffor-scope | 從頭開始執行程式,也允許進行重定向。 |
-fno-rtti | 關閉對 dynamic_cast 和 typeid 的支援。如果你不需要這些功能,關閉它會節省一些空間。 |
-Wctor-dtor-privacy | 當一個類沒有用時給出警告。因為建構函式和解構函式會被當作私有的。 |
-Wnon-virtual-dtor | 當一個類有多型性,而又沒有虛解構函式時,發出警告。-Wall會開啟這個選項。 |
-Wreorder | 如果程式碼中的成員變數的初始化順序和它們實際執行時初始化順序不一致,給出警告。 |
-Wno-deprecated | 使用過時的特性時不要給出警告。 |
-Woverloaded-virtual | 如果函式的宣告隱藏住了基類的虛擬函式,就給出警告。 |
Machine Dependent Options (Intel) | |
-mtune=cpu-type | 為指定型別的 CPU 生成程式碼。cpu-type可以是:i386,i486,i586,pentium,i686,pentium4 等等。 |
-msse -msse2 -mmmx -mno-sse -mno-sse2 -mno-mmx |
使用或者不使用MMX,SSE,SSE2指令。 |
-m32 -m64 |
生成32位/64位機器上的程式碼。 |
-mpush-args -mno-push-args |
(不)使用 push 指令來進行儲存引數。預設是使用。 |
-mregparm=num | 當傳遞整數引數時,控制所使用暫存器的個數。 |
相關文章
- GCC 編譯選項GC編譯
- gcc常用的編譯選項對程式碼的影響(轉)GC編譯
- gcc編譯GC編譯
- GCC的-g選項應該在編譯階段起作用(轉)GC編譯
- PHP編譯選項PHP編譯
- gcc 編譯器與 clang 編譯器GC編譯
- gcc或g++的編譯選項 -shared -fPIC 與 -g -rdynamic 部分轉載GC編譯
- gcc編譯cpp檔案GC編譯
- GCC編譯器的使用GC編譯
- vc 編譯連線選項編譯
- Linux中gcc編譯工具LinuxGC編譯
- linux下的gcc編譯LinuxGC編譯
- gcc 編譯多個原始檔GC編譯
- gcc最佳編譯引數(轉)GC編譯
- 安裝 GCC 編譯器(轉)GC編譯
- cmake中新增 -g編譯選項編譯
- 探索gcc編譯最佳化細節 編譯器最佳化gcc -o3GC編譯
- GCC編譯過程(預處理->編譯->彙編->連結)GC編譯
- 開源編譯器 GCC 跨越 5.0,釋出 GCC 5.1編譯GC
- GCC 使用指南及gcc最佳編譯引數(轉)GC編譯
- GCC內聯彙編(2)GCC生成彙編程式碼簡單例項GC單例
- GCC編譯和連結過程GC編譯
- GCC編譯器背後的故事GC編譯
- Linux gcc編譯器安裝LinuxGC編譯
- -debug(C# 編譯器選項)C#編譯
- typescript 3.2 新編譯選項strictBindCallApplyTypeScript編譯APP
- FFmpeg音視訊編譯配置選項編譯
- 很有用的 GCC 命令列選項GC命令列
- FreeBSD中的GNU C編譯器--編譯器GCC(轉)編譯GC
- 記錄一次gcc的編譯GC編譯
- 編譯器GCC與Clang的異同編譯GC
- linux下gcc/g++編譯用法LinuxGC編譯
- gcc編譯器小知識FAQ(轉)GC編譯
- gcc 從語言編譯全過程 預處理---->編譯---->彙編----->連結GC編譯
- 32位支援:使用 GCC 交叉編譯GC編譯
- redhat 6.5 gcc編譯器初識之一RedhatGC編譯
- opensuse linux安裝gcc編譯環境LinuxGC編譯
- 記一次編譯GCC的經歷編譯GC