# 定义变量,用于存放目标文件和依赖文件的目录 OBJ_DIR := ./objs # $@ 表示目标文件, # $^ 表示依赖文件列表去重之后的所有依赖文件, # $< 表示第一个依赖文件, # $* 表示匹配目标文件名的部分, # $% 表示静态模式中的百分号匹配 # CC 是编译器 # CC = gcc # TARGET 是目标文件 TARGET = main # OBJ 是目标文件依赖的文件 # OBJ = link.o main.o OBJ = $(OBJ_DIR)/link.o $(OBJ_DIR)/main.o # 所有的 .o 文件都依赖于 .c 文件 $(OBJ_DIR)/%.o: %.c $(CC) -c $< -o $@ # 意思是: 目标文件依赖于 OBJ, 执行命令是 $(CC) $(OBJ) -o $(TARGET) $(TARGET): $(OBJ) $(CC) $(OBJ) -o $(TARGET) # # link.o 依赖于 link.c, 执行命令是 $(CC) -c link.c -o link.o # # 用于生成目标文件 link.o # link.o: link.c # $(CC) -c link.c -o $(OBJ_DIR)/link.o # # 用于生成目标文件 main.o # main.o: main.c # $(CC) -c main.c -o $(OBJ_DIR)/main.o # 用于清理目标文件和可执行文件 clean: rm -rf $(OBJ) $(TARGET)