######################################
# Copyright (c) 1997 George Foot ()
# All rights reserved.
######################################
#隐含规则。GUN Make在不特别指定的情况下会使用诸如以下编译命令:$(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c $< -o $@,
#目标(可执行文档)名称,库(譬如stdcx,iostr,mysql等),头文件路径
#入口函数名
#elf文件名
#库目录 如-lgcc -L指定库的搜索路径键
#头文件目录
#源文件目录加上*.c
#链接文件
#交叉编译器
ENTRYPOINT := nmain
BINARY := test.bin
EXECUTABLE := test
LIBS :=
INCLUDES := ./inc ./include ./lib ./net ./src
SRC_DIR := ./lib/*.c ./src/*.c ./net/*.c ./lib/*.S
LINKERSCRIPT := ./src/ubl_davinci.lds
CROSSCOMPILE := arm-linux-
RM := rm -f
CC=$(CROSSCOMPILE)gcc
OBJCOPY=$(CROSSCOMPILE)objcopy
OBJDUMP=$(CROSSCOMPILE)objdump
OBJCOPYFLAGS =
CFLAGS = -g -Wall -Os -D__ARM__ -D__KERNEL__ -DCONFIG_ARM
CFLAGS += $(addprefix -I,$(INCLUDES))
LDFLAGS += -Wl,-T$(LINKERSCRIPT),-Map,systmp.map -nostdlib -nostartfiles
#以下部分无需修改
SOURCE := $(wildcard $(SRC_DIR))
OBJS := $(patsubst %.S,%.o,$(patsubst %.c,%.o,$(SOURCE)))
DEPS := $(patsubst %.o,%.d,$(OBJS))
.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))
rebuild: clean all
-include $(DEPS)
%.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 < > $@; \
rm -f
%.d: %.S
@set -e; rm -f $@; \
$(CC) -MM $(CFLAGS) $< > ; \
sed -i 's,.*.o[:],$*.o:,g'
sed 's,\($*\)\.o[:]*,\1.o < > $@; \
rm -f
clean :
$(RM) *.o
$(RM) *.d
$(RM) systmp.map
$(RM) $(EXECUTABLE)
$(RM) $(DEPS)
$(RM) $(OBJS)
$(RM) $(BINARY)
#%.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)))
阅读(879) | 评论(0) | 转发(0) |