# 定义变量
CC = gcc
CFLAGS = -Wall -Iinclude
SRCDIR = src
OBJDIR = obj
TESTDIR = tests
TARGET = myprogram
TEST_TARGET = test_suite
# 获取源文件列表
SRC = $(wildcard $(SRCDIR)/*.c)
OBJS = $(patsubst $(SRCDIR)/%.c, $(OBJDIR)/%.o, $(SRC))
# 获取测试文件列表
TEST_SRC = $(wildcard $(TESTDIR)/*.c)
TEST_OBJS = $(patsubst $(TESTDIR)/%.c, $(OBJDIR)/%.o, $(TEST_SRC))
# 目标规则
$(TARGET): $(OBJS)
$(CC) $(CFLAGS) -o $@ $^
# 测试目标
$(TEST_TARGET): $(OBJS) $(TEST_OBJS)
$(CC) $(CFLAGS) -o $@ $^
# 编译源文件
$(OBJDIR)/%.o: $(SRCDIR)/%.c
$(CC) $(CFLAGS) -c $< -o $@
# 编译测试文件
$(OBJDIR)/%.o: $(TESTDIR)/%.c
$(CC) $(CFLAGS) -c $< -o $@
# 清理
.PHONY: clean
clean:
rm -f $(OBJDIR)/*.o $(TARGET) $(TEST_TARGET)