跳到主要内容
🔍

代码示例: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 clean
     
  • examples/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