GCC (GNU Compiler Collection) 是 Linux 系統下最核心的編譯工具鏈,支援 C、C++、Objective-C 等語言。掌握 GCC 常用選項對提升開發效率至關重要。
// hello.c
#include <stdio.h>
int main(void) {
printf("Hello World!\n");
return 0;
}
編譯執行:
gcc -o hello hello.c
./hello
| 選項 | 功能 | 範例 |
|---|---|---|
| -o <file> | 指定輸出檔案名稱。預設為 a.out。 | gcc -o myapp main.c |
| -c | 僅編譯至目標檔 (.o),不連結。適合多檔案專案分開編譯。 | gcc -c util.c gcc -o app main.o util.o |
| -I<dir> | 加入頭檔搜尋路徑。 | gcc -I./include main.c |
| -L<dir> | 加入函式庫搜尋路徑。 | gcc -L./lib main.c |
| -l<name> | 連結指定函式庫 (libname.so/a)。 | gcc -lm main.c (連結 libm 數學庫) |
| -O<level> | 優化等級:0(無)、1、2、3、s(體積)、fast(激進)。 | gcc -O2 main.c |
| -Wall -Wextra | 開啟常見警告,強烈建議永遠加上。 | gcc -Wall -Wextra main.c |
| -g | 產生除錯資訊,供 GDB 使用。 | gcc -g main.c |
| -std=<standard> | 指定語言標準:c99, c11, c17, c++11, c++17 等。 | gcc -std=c11 main.c |
| -D<macro> | 定義前置處理器巨集。 | gcc -DDEBUG=1 main.c |
| -E / -S | 僅預處理 (-E) 或產生組語 (-S),不組譯連結。 | gcc -E main.c > main.i |
gcc 雖能編譯 .cpp 檔,但不會自動連結 C++ 標準庫。請直接使用 g++,它會自動處理:
g++ -o app main.cpp -std=c++17
# 1. 分別編譯為目標檔
gcc -c -Wall -O2 -Iinclude src/main.c -o build/main.o
gcc -c -Wall -O2 -Iinclude src/utils.c -o build/utils.o
# 2. 連結生成執行檔
gcc build/main.o build/utils.o -Llib -lmylib -o bin/app