# 定义变量，用于存放目标文件和依赖文件的目录
OBJ_DIR := ./objs

# $@ 表示目标文件,
# $^ 表示依赖文件列表去重之后的所有依赖文件, 
# $< 表示第一个依赖文件, 
# $* 表示匹配目标文件名的部分,
# $% 表示静态模式中的百分号匹配

# CC 是编译器
# CC = gcc
# TARGET 是目标文件
TARGET = $(OBJ_DIR)/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)