From 4fdf297d565c4a70080b110f4073b9608838bcd6 Mon Sep 17 00:00:00 2001 From: jdh <24016020834@stu.nsu.edu.cn> Date: Thu, 24 Apr 2025 20:05:00 +0800 Subject: [PATCH] Update Makefile --- Makefile | 64 ++++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 41 insertions(+), 23 deletions(-) diff --git a/Makefile b/Makefile index 9296a69..b310f4f 100644 --- a/Makefile +++ b/Makefile @@ -1,33 +1,51 @@ -# 编译器和编译选项 +# 定义编译器 CC = gcc -CFLAGS = -O2 -w -# 自动扫描当前目录下的所有 .c 和 .h 文件 -SRCS = $(wildcard *.c) -HEADERS = $(wildcard *.h) -OBJS = $(patsubst %.c, build/%.o, $(SRCS)) +# 定义源文件目录 +SRC_DIR = . -# 目标文件 -TARGET = build/main +# 定义头文件目录 +INC_DIR = . -# 默认目标 -all: build $(TARGET) +# 定义目标文件目录 +OBJ_DIR = obj -# 创建 build 文件夹 -build: - if not exist build mkdir build +# 定义可执行文件名称 +TARGET = main -# 链接目标 -$(TARGET): $(OBJS) - $(CC) $(CFLAGS) -o $@ $^ +# 定义源文件后缀 +SRC_EXT = .c -# 编译规则 -build/%.o: %.c $(HEADERS) +# 定义目标文件后缀 +OBJ_EXT = .o + +# 定义源文件列表 +SRC_FILES = \ + array_queue.c \ + array_stack.c \ + linked_list_stack.c \ + linked_list.c \ + sq_list.c \ + main.c + +# 使用正则表达式替换源文件后缀为.o,生成目标文件列表 +OBJ_FILES = $(patsubst $(SRC_DIR)/%$(SRC_EXT), $(OBJ_DIR)/%$(OBJ_EXT), $(SRC_FILES)) + +# 定义编译选项 +CFLAGS = -I$(INC_DIR) -Wall -Wextra -pedantic + +# 默认目标,调用链接规则 +all: $(TARGET) + +# 链接规则,将所有目标文件链接成可执行文件 +$(TARGET): $(OBJ_FILES) + $(CC) $(CFLAGS) $^ -o $@ + +# 编译规则,将源文件编译成目标文件 +$(OBJ_DIR)/%$(OBJ_EXT): $(SRC_DIR)/%$(SRC_EXT) + @mkdir -p $(OBJ_DIR) $(CC) $(CFLAGS) -c $< -o $@ -# 清理目标 +# 清理目标文件和可执行文件 clean: - if exist build rmdir /S /Q build - -# 伪目标 -.PHONY: all clean build \ No newline at end of file + rm -rf $(OBJ_DIR) $(TARGET) \ No newline at end of file