通用Makefile
INC = -I. \
MAXDEPTH=5
DIRS := $(shell find . -maxdepth $(MAXDEPTH) -type d)
FILES = $(foreach dir, $(DIRS), $(wildcard $(dir)/*.c))
OBJS=$(patsubst %.c, %.o, $(FILES))
DEPS=$(FILES:.c=.d)
CROSS_COMPILE =
CC = @echo " $(CROSS_COMPILE)GCC $@"; $(CROSS_COMPILE)gcc
CPP = @echo " $(CROSS_COMPILE)G++ $@"; $(CROSS_COMPILE)g++
LD = @echo " $(CROSS_COMPILE)LD $@"; $(CROSS_COMPILE)ld
AR = @echo " $(CROSS_COMPILE)AR $@"; $(CROSS_COMPILE)ar
OBJCOPY = @echo " $(CROSS_COMPILE)OBJCOPY $@"; $(CROSS_COMPILE)objcopy
STRIP = @echo " $(CROSS_COMPILE)STRIP $@"; $(CROSS_COMPILE)strip
RM = @echo " RM $(TARGET) $(OBJ)"; rm -f
CP = @echo " CP $(TARGET) $(LIB_DIR)"; cp -rf
.PHONY: all clean
PROJECTNAME = TEST
TARGET=$(PROJECTNAME).bin
all: $(TARGET)
-include $(DEPS)
DEFS +=
CFLAGS += $(INC) $(DEFS)
CFLAGS += -g -Os -nostartfiles -e _Startup
LDFLAGS += -v -Wl,-Map,$(PROJECTNAME).map
.c.o:
$(CC) $(CFLAGS) -c $< -o $@ -MD -MF $*.d -MP
$(TARGET): $(OBJS)
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^
$(OBJCOPY) -O srec $(TARGET) $(PROJECTNAME).srec
clean:
$(RM) $(TARGET) $(OBJS) $(DEPS) *.srec *.map