######################################
# Copyright (c) 1997 George Foot (george.foot@merton.ox.ac.uk)
# All rights reserved.
######################################
#隐含规则。GUN Make在不特别指定的情况下会使用诸如以下编译命令:$(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c $< -o $@,
#目标(可执行文档)名称,库(譬如stdcx,iostr,mysql等),头文件路径
#入口函数名
#elf文件名
#库目录 如-lgcc -L指定库的搜索路径
#头文件目录
#源文件目录加上*.c
#链接文件
#交叉编译器
ENTRYPOINT := main
BINARY := test.bin
EXECUTABLE := test
LIBS := libbmp.a
INCLUDES := .
SRC_DIR := ./*.c ./*.S
LINKERSCRIPT := ./src/ubl_davinci.lds
CROSSCOMPILE := arm-linux-
RM := rm -f
CC=$(CROSSCOMPILE)gcc
OBJCOPY=$(CROSSCOMPILE)objcopy
OBJDUMP=$(CROSSCOMPILE)objdump
AR=$(CROSSCOMPILE)ar
OBJCOPYFLAGS =
CFLAGS = -g -Wall -Os
CFLAGS += $(addprefix -I,$(INCLUDES))
CFLAGS = -g -Wall -Os
ARFLAGS = crv
LDFLAGS += -Wl,-T$(LINKERSCRIPT),-Map,systmp.map -nostdinc -nostdlib -nostartfiles
#以下部分无需修改
SOURCE := $(wildcard $(SRC_DIR))
OBJS := $(patsubst %.S,%.o,$(patsubst %.c,%.o,$(SOURCE)))
DEPS := $(patsubst %.o,%.d,$(OBJS))
-include $(DEPS)
.PHONY : all deps objs clean rebuild
all : $(BINARY)
$(BINARY) :$(EXECUTABLE)
$(OBJCOPY) $(OBJCOPYFLAGS) -O binary $< $@
@echo -n "The entry point of the binary is 0x"
@$(OBJDUMP) -t $(EXECUTABLE) | grep -E '[0-9a-f]{8}*[0-9a-f]{8} $(ENTRYPOINT)' | sed 's/\([0-9a-f]*\).*/\1/'
$(EXECUTABLE) : $(DEPS) $(OBJS)
$(CC) $(LDFLAGS) -o $(EXECUTABLE) $(OBJS) $(addprefix -l,$(LIBS))
lib: $(LIBS)
$(LIBS) : $(DEPS) $(OBJS)
$(AR) $(ARFLAGS) $@ $(OBJS)
rebuild: clean all
%.o: %.c %.d
$(CC) $(CFLAGS) -c $< -o $@
%.o: %.S %.d
$(CC) $(CFLAGS) -c $< -o $@
%.d: %.c
@set -e; rm -f $@; \
$(CC) -MM $(CFLAGS) $< > $@.$$$$; \
sed -i 's,.*.o[:],$*.o:,g' $@.$$$$;\
sed 's,\($*\)\.o[:]*,\1.o $@:,g' < $@.$$$$ > $@; \
rm -f $@.$$$$
%.d: %.S
@set -e; rm -f $@; \
$(CC) -MM $(CFLAGS) $< > $@.$$$$; \
sed -i 's,.*.o[:],$*.o:,g' $@.$$$$;\
sed 's,\($*\)\.o[:]*,\1.o $@:,g' < $@.$$$$ > $@; \
rm -f $@.$$$$
clean :
$(RM) *.o
$(RM) *.d
$(RM) systmp.map
$(RM) $(EXECUTABLE)
$(RM) $(LIBS)
$(RM) $(DEPS)
$(RM) $(OBJS)
$(RM) $(BINARY)
#sed -i 's,.*.o[:],$*.o:,g' $@.$$$$;\
#sed命令:分隔符必须用“,”,不能用反斜杠。
#sed -i 's,.*.o[:],$*.o:,g' $@.$$$$;\
#解释:“.*.o[:]” s 是查找替换,.表示非换行符的字符
# *表示匹配零或多个字符
# []匹配一个指定范围内的字符
#链接:http://hi.baidu.com/lb_hb/blog/item/b3089e8e278657fc513d9219.html
#%.o: %.c %.d
# $(CC) $(CFLAGS) -c $< -o $@
#隐含规则,所有后缀名为.o的文件都在此编译。
#-c 生成o文件
#-o 指定文件名
#CFLAGS 加-v可以看到很多附加信息
#-include $(DEPS)
#上面这条语句是包含d文件,如果d文件有语法错误,make时将出现错误,特别注意。
#历史删除:
#ifneq ($(MISSING_DEPS),)
#$(MISSING_DEPS) :
# @echo $(MISSING_DEPS)
# $(RM) $(patsubst %.d,%.o,$@)
#endif
#以上注释了,不能用
#deps : $(DEPS)
# $(CC) -MM -MMD $(SOURCE)
#objs : $(OBJS)
#MISSING_DEPS := $(filter-out $(wildcard $(DEPS)),$(DEPS))
#MISSING_DEPS_SOURCES := $(wildcard $(patsubst %.d,%.c,$(MISSING_DEPS)))
#CFLAGS = -g -Wall -Os -fno-builtin #printf->puts
阅读(2538) | 评论(0) | 转发(0) |