# 编译器设置 CC := gcc CFLAGS := -Wall -Wextra -O2 -I./include LDFLAGS := -lm LIBS := # 目录设置 SRC_DIR := src BUILD_DIR := build DIST_DIR := dist INCLUDE_DIR := include # 获取源文件和目标文件 SOURCES := $(wildcard $(SRC_DIR)/*.c) OBJECTS := $(patsubst $(SRC_DIR)/%.c,$(BUILD_DIR)/%.o,$(SOURCES)) DEPS := $(OBJECTS:.o=.d) # 自动生成的依赖文件 # 最终可执行文件 TARGET := $(DIST_DIR)/main # 默认目标 all: $(TARGET) # 链接可执行文件 $(TARGET): $(OBJECTS) | $(DIST_DIR) $(CC) $^ $(LDFLAGS) $(LIBS) -o $@ # 编译源文件并生成依赖 $(BUILD_DIR)/%.o: $(SRC_DIR)/%.c | $(BUILD_DIR) $(CC) $(CFLAGS) -MMD -MP -c $< -o $@ # 创建必要的目录 $(BUILD_DIR): mkdir -p $@ $(DIST_DIR): mkdir -p $@ # 包含自动生成的依赖 -include $(DEPS) # 清理构建 clean: rm -rf $(BUILD_DIR) $(TARGET) .PHONY: all clean