通用Makefile

通用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 #指定程序入口_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 #转换格式为srec

clean: 
	$(RM) $(TARGET) $(OBJS) $(DEPS) *.srec *.map 


你可能感兴趣的:(通用Makefile)