CC = gcc CFLAGS = -Wall -Wextra -g -I../parser -I../utils OBJ_DIR = ../build/test TARGET = $(OBJ_DIR)/test SRCS = test.c ../parser/parser.c ../parser/lexer.c ../parser/ast.c ../parser/ast_printer.c ../parser/error.c ../utils/file.c ../utils/log.c # 将源文件转换为目标文件列表 OBJS = $(SRCS:%.c=$(OBJ_DIR)/%.o) # 创建目录的函数 create_dirs := $(shell if not exist "$(OBJ_DIR)" mkdir "$(OBJ_DIR)" && \ if not exist "$(OBJ_DIR)\..\parser" mkdir "$(OBJ_DIR)\..\parser" && \ if not exist "$(OBJ_DIR)\..\utils" mkdir "$(OBJ_DIR)\..\utils") # 默认目标 all: $(TARGET) # 链接目标文件生成可执行文件 $(TARGET): $(OBJS) $(CC) $(OBJS) -o $(TARGET) # 编译源文件为目标文件的规则 $(OBJ_DIR)/%.o: %.c $(CC) $(CFLAGS) -c $< -o $@ # 清理规则 clean: del /F /Q $(OBJ_DIR)\*.o del /F /Q $(TARGET).exe # 运行测试 test: $(TARGET) $(TARGET) .PHONY: all clean test