GCC 編譯參數詳解
在 Linux 環境下進行 C/C++ 開發時,gcc 是最常用的編譯器。掌握其核心參數對於構建大型項目、編寫 Makefile 以及性能優化至關重要。本文整理了開發中最高頻的編譯選項並分類說明。
目錄與庫搜尋路徑
| 參數 | 說明 |
-I <dir> | 將 <dir> 加入頭文件搜尋路徑的最前面(大寫字母 i)。 |
-L <dir> | 將 <dir> 加入庫文件搜尋路徑的最前面。 |
-l <name> | 鏈接名為 lib<name>.so 或 lib<name>.a 的庫(小寫字母 L)。 |
編譯流程控制
| 參數 | 階段 | 輸出文件 | 說明 |
-E | 預處理 | .i | 僅執行預處理(展開宏、包含頭文件、去除註釋)。 |
-S | 編譯 | .s | 將預處理後的代碼編譯為匯編語言文件。 |
-c | 組裝 | .o | 編譯、組裝為目標文件,不進行鏈接。適用於子模塊編譯。 |
-o <file> | 鏈接 | 可執行文件 | 指定最終輸出的可執行文件名(默認為 a.out)。 |
優化與調試
| 參數 | 說明 |
-O / -O2 / -O3 | 啟用優化編譯。等級越高優化越激進,編譯時間越長,運行效率越高。-O2 為推薦默認值。 |
-Wall | 開啟所有常見警告信息,強烈建議常駐開啟。 |
-g | 生成調試符號信息,配合 GDB 進行源級調試必不可少。 |
其他實用參數
-std=c11 / -std=c++17:指定語言標準版本。
-DNAME / -DNAME=VALUE:命令行定義宏,等價於代碼中 #define。
-fPIC:生成位置無關代碼,構建共享庫時必須。
-pthread:編譯並鏈接多線程程序(自動處理頭文件路徑和庫鏈接)。
實戰組合示例
# 開發調試階段
gcc -Wall -g -O0 -std=c11 -c module.c -o module.o
# 發布優化階段
gcc -Wall -O2 -std=c11 module.o main.o -o myapp -lpthread -lm
熟練掌握這些參數,能讓你從「能跑通」進階到「構建高質量、可維護的工程」。