在大型專案中,數百個原始檔案的相依關係錯綜複雜。若每次編譯都手動輸入 gcc 指令,不僅效率低落,更容易出錯。Make 工具透過 Makefile 自動分析檔案時間戳記,僅重新編譯有變更的部分,大幅提升開發效率。
目標: 相依檔案
[Tab]建置指令
範例:
prog: filea.o fileb.o filec.o
cc filea.o fileb.o filec.o -LS -o prog
filea.o: filea.c a.h defs
cc -c filea.c
OBJECTS = filea.o fileb.o filec.o引用方式:$(VAR) 或 $V(單字元)。命令列參數可覆蓋 Makefile 內定義:
make "LIBES=-LL -LS"
| 變數 | 含義 |
|---|---|
| $@ | 目標檔名稱 |
| $< | 第一個相依檔名稱 |
| $? | 比目標新的相依檔清單 |
| $* | 不含副檔名的目標檔名稱 |
GNU Make 支援更強大的模式規則:
%.o: %.c
$(CC) $(CFLAGS) -c -o $@ $<
自動推導 .c → .o 轉換,無需為每個檔案撰寫規則。
常用 clean 移除中間檔:
clean:
rm -f *.o
| 參數 | 功能 |
|---|---|
| -f file | 指定 Makefile 檔案 |
| -n | 演練模式,僅顯示指令不執行 |
| -j N | 平行建置(GNU Make) |
| -k | 遇錯繼續處理其他目標 |
本文包含一個來自 Unix 程式設計手冊的完整範例,涵蓋:
install、print、lint、arch 等維護目標@ 抑制指令回顯、- 忽略錯誤等技巧make -n 驗證建置流程clean、distclean 等標準維護目標掌握 Makefile,讓您從繁瑣的手動編譯中解脫,專注於核心開發工作。