vety-language/test/Makefile

37 lines
936 B
Makefile

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