# all: cc # # run: ccompiler # # ./ccompiler test.c flat.bin # # simple_test: # # make -C tests/simple # cc: frontend middleend backend ccompiler.c test_main.c # gcc -g ccompiler.c test_main.c -I../ -L./frontend -lfrontend -L./middleend -lmiddleend -L./backend -lbackend -L../lib -lcore -o cc # frontend: # make -C ./frontend # middleend: # make -C ./middleend # backend: # make -C ./backend # clean: # rm -f cc # make -C ./frontend clean # make -C ./middleend clean # make -C ./backend clean # 顶层Makefile修改 CC = gcc AR = ar CFLAGS = -g -Wall -I.. MODULES = frontend middleend backend FRONTEND_SUBDIRS = lexer parser parser/ast MODULES += $(addprefix frontend/, $(FRONTEND_SUBDIRS)) MIDDLEEND_MODULES = ir MODULES += middleend/$(MIDDLEEND_MODULES) BACKEND_MODULES = riscv32 MODULES += backend/$(BACKEND_MODULES) # 自动收集所有子模块源文件 EXCLUDE = test*.c SRCS = $(filter-out $(EXCLUDE), $(wildcard $(addsuffix /*.c,$(MODULES)))) SRCS += ccompiler.c OBJS = $(SRCS:.c=.o) libcc.a: $(OBJS) $(AR) rcs $@ $^ %.o: %.c $(CC) $(CFLAGS) -c -o $@ $< clean: rm -f libcc.a $(OBJS)