# ======================================== # Makefile — C 项目编译与运行 # ======================================== # ---------- 编译器与选项 ---------- CC = gcc CFLAGS = -Wall -Wextra -std=c11 -g LDFLAGS = LIBS = # ---------- 项目结构 ---------- SRCDIR = src INCDIR = include BUILDDIR= build BINDIR = bin # ---------- 自动收集源文件 ---------- SRCS = $(wildcard $(SRCDIR)/*.c) OBJS = $(SRCS:$(SRCDIR)/%.c=$(BUILDDIR)/%.o) TARGET = $(BINDIR)/app # ---------- 默认目标 ---------- .PHONY: all run clean help all: $(TARGET) # ---------- 链接 ---------- $(TARGET): $(OBJS) | $(BINDIR) $(CC) $(LDFLAGS) -o $@ $^ $(LIBS) # ---------- 编译 ---------- $(BUILDDIR)/%.o: $(SRCDIR)/%.c | $(BUILDDIR) $(CC) $(CFLAGS) -I$(INCDIR) -c -o $@ $< # ---------- 创建目录 ---------- $(BINDIR): mkdir -p $(BINDIR) $(BUILDDIR): mkdir -p $(BUILDDIR) # ---------- 运行 ---------- run: $(TARGET) ./$(TARGET) # ---------- 清理 ---------- clean: rm -rf $(BUILDDIR) $(BINDIR) # ---------- 帮助 ---------- help: @echo "使用说明:" @echo " make — 编译项目" @echo " make run — 编译并运行" @echo " make clean — 清理构建产物" @echo " make help — 显示帮助" @echo "" @echo "项目结构:" @echo " src/ — 源文件 (.c)" @echo " include/ — 头文件 (.h)" @echo " build/ — 编译中间文件 (.o)" @echo " bin/ — 可执行文件"