Makefile编写指南

基本结构

# 目标:依赖 # recipe (TAB-indented!) .PHONY: all clean test CC = gcc CFLAGS = -Wall -O2 all: myapp myapp: main.o utils.o $(CC) $(CFLAGS) -o $@ $^ main.o: main.c main.h $(CC) $(CFLAGS) -c $< -o $@ clean: rm -f *.o myapp test: all ./myapp --test

自动变量

变量含义
$@目标名称
$<第一个依赖
$^所有依赖
$?比目标新的依赖
$*模式规则的茎
$(@D)目标目录
$(@F)目标文件名

函数与模式

SRCS := $(wildcard src/*.c) OBJS := $(patsubst src/%.c,obj/%.o,$(SRCS)) # 模式规则 obj/%.o: src/%.c @mkdir -p $(@D) $(CC) $(CFLAGS) -c $< -o $@ # 字符串函数 UPPER := $(shell echo $(NAME) | tr a-z A-Z) FILTERED := $(filter %.c, $(FILES)) WITHOUT := $(filter-out test_%.c, $(SRCS)) # 条件 ifeq ($(OS),Windows_NT) EXE = .exe else EXE = endif