Chinaunix首页 | 论坛 | 博客
  • 博客访问: 437653
  • 博文数量: 52
  • 博客积分: 3193
  • 博客等级: 中校
  • 技术积分: 860
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-19 09:58
文章分类

全部博文(52)

文章存档

2012年(1)

2011年(9)

2009年(18)

2008年(24)

我的朋友

分类: LINUX

2011-04-08 14:58:41

######################################
# 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

阅读(2482) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~