代码示例:1.1.4 Makefile 基础与多目录工程
全部示例均标注编译命令、适用环境与实测状态;完整验证记录见《03.5-代码编译运行验证记录》。
examples/ex1-simple/Makefile · 单目录多文件 Makefile(TAB/变量/自动变量/clean/.PHONY/增量编译)
# ex1 单目录多文件 Makefile(1.1.4) # 规则三要素:目标: 依赖 / 命令(命令必须以 TAB 开头,空格会报 missing separator) # 运行:mingw32-make clean all(Windows)/ make clean all(Linux) CC = gcc CFLAGS = -std=c11 -Wall -Wextra -Wpedantic OBJS = main.o util.o # clean 的平台差异:Windows 用 del、Linux 用 rm(ifeq 按 OS 环境变量选择) ifeq ($(OS),Windows_NT) RM = del /Q EXE = .exe else RM = rm -f EXE = endif # TARGET 带平台后缀,保证"目标文件已存在"的时间戳判断在双平台都成立 TARGET = ex1$(EXE) all: $(TARGET) $(TARGET): $(OBJS) $(CC) $(OBJS) -o $(TARGET) $(CFLAGS) main.o: main.c util.h $(CC) -c main.c -o main.o $(CFLAGS) util.o: util.c util.h $(CC) -c util.c -o util.o $(CFLAGS) clean: -$(RM) $(OBJS) $(TARGET) .PHONY: all cleanexamples/ex2-multidir/Makefile · 多目录工程(顶层 Makefile 嵌套 make -C src + include/ 头文件)
# ex2 多目录工程顶层 Makefile(1.1.4) # 顶层只负责分发:真正构建规则在 src/Makefile,用 $(MAKE) -C 进入子目录 # 运行:mingw32-make clean all(Windows)/ make clean all(Linux) all: $(MAKE) -C src clean: $(MAKE) -C src clean .PHONY: all clean