從 Windows 客戶端開發轉向 Linux,基礎夯實是關鍵。本文記錄 Make/Makefile 學習筆記,幫助理解自動化編譯流程。

#define)、包含頭文件(#include)、條件編譯。.obj,Linux 下為 .o 目標文件。大型專案包含成百上千源文件,手動編譯不可行。Makefile 定義構建規則:
make 即可自動完成全流程make 是解析 Makefile 的命令工具(GNU Make、VS nmake、Delphi make 等);Makefile 是描述構建邏輯的腳本文件,亦可執行系統命令,功能強大。
單文件 gcc HelloWorld.c 生成 a.out 簡單直接。但多文件專案(如 add.c/sub.c/mul.c/divi.c/main.c 及對應頭文件)如何高效編譯?
$ gcc -c add.c -o add.o
$ gcc -c sub.c -o sub.o
$ gcc -c mul.c -o mul.o
$ gcc -c divi.c -o divi.o
$ gcc -c main.c -o main.o
$ gcc -o main add.o sub.o mul.o divi.o main.o
缺點顯而易見:繁瑣、易錯、無增量編譯、依賴關係難維護。
編寫 Makefile 自動化上述流程:
# 變量定義
CC = gcc
CFLAGS = -Wall -g
OBJS = add.o sub.o mul.o divi.o main.o
TARGET = main
# 默認目標
$(TARGET): $(OBJS)
$(CC) -o $(TARGET) $(OBJS)
# 模式規則:.c -> .o
%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@
# 清理
clean:
rm -f $(OBJS) $(TARGET)
.PHONY: clean
執行 make 即可自動構建;修改單個 .c 後再次 make 僅重編該文件;make clean 清理產出物。
VAR = value,引用 $(VAR)$@(目標)、$<(第一依賴)、$^(所有依賴)%.o: %.c 批量處理同類文件.PHONY: clean 避免與同名文件衝突掌握 Makefile,是 Linux C/C++ 開發邁向工程化的第一步。下一階段將深入探討進階用法:多目錄構建、自動依賴生成、交叉編譯配置等。