Chinaunix首页 | 论坛 | 博客
  • 博客访问: 742085
  • 博文数量: 124
  • 博客积分: 3156
  • 博客等级: 中校
  • 技术积分: 1584
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-02 10:29
文章分类

全部博文(124)

文章存档

2012年(3)

2011年(2)

2010年(61)

2009年(34)

2008年(24)

我的朋友

分类: LINUX

2009-08-04 15:51:06

######################################
# 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)
 
 
 
 
 
#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)))
 
阅读(882) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~