← Back

Makefile 基礎筆記

2026.07.23 · Linux · 2 min read

剛開始學 Makefile 的時候,我覺得它很像一種「說明書」— 告訴電腦:你想要什麼檔案,這個檔案從哪裡來,用什麼指令把它生出來。

核心觀念其實就一句話:

什麼檔案依賴什麼,要用什麼指令去產生目標檔案。

一個完整的 Makefile

這是我練習 Process Manager(pshow)時寫的 Makefile:

CC = gcc
CFLAGS = -Wall -Wextra -O2
TARGET = pshow

all: $(TARGET)

$(TARGET): main.c
	$(CC) $(CFLAGS) -o $(TARGET) main.c

clean:
	rm -f $(TARGET)

.PHONY: all clean

拆開來看

變數

CC = gcc
CFLAGS = -Wall -Wextra -O2
TARGET = pshow

把編譯器和參數設成變數,之後要用就用 $(變數名稱) 引用。好處是如果之後換編譯器或調參數,改一行就好。

目標與依賴

$(TARGET): main.c
	$(CC) $(CFLAGS) -o $(TARGET) main.c

$(TARGET)(也就是 pshow)依賴於 main.c。如果 main.c 有變動,重新 make 時會自動重新編譯。

第二行前面的是 Tab 鍵,不是空格,這是 Makefile 的語法規定。

.PHONY

.PHONY: all clean

告訴 make:allclean 是指令名稱,不是實際的檔案。如果不加這行,萬一目錄裡剛好有一個叫 clean 的檔案,make 會以為這個目標已經完成了,就不執行了。

編譯選項說明

選項說明
-Wall顯示基本警告
-Wextra顯示更多警告
-O2最佳化等級 2
-o指定輸出檔名

常用指令

make         # 編譯(執行 all)
make clean   # 清除產出的檔案

重點整理