Chinaunix首页 | 论坛 | 博客
  • 博客访问: 54856
  • 博文数量: 21
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 60
  • 用 户 组: 普通用户
  • 注册时间: 2013-04-23 15:40
文章分类

全部博文(21)

文章存档

2013年(21)

我的朋友

分类: 嵌入式

2013-05-12 15:24:54

#老师写的Makefile


CROSS_COMPILE=arm-none-eabi-
NAME=led


#----+=是追加赋值----编译时传进的参数
#---显示所有的警告   可调试 不优化    指令集版本  应用二进制程序接口      浮点  浮点应用二进制程序接口 不使用gcc的内将函数  I表示指定要使用的头文件的路径
CFLAGS += -Wall        -g     -O0    -marth=armv7-a      -mabi=aapcs   -mfpu=neon  -mfloat-abi=softfp     -fno-builtin       -I ./common/include
LD = $(CROSS_COMPILE)ld
CC = $(CROSS_COMPILE)gcc-4.6.2
OBJCOPY = $(CROSS_COMPILE)objcopy 
OBJDUMP = $(CROSS_COMPILE)objdump 


#在start目录下通配所有的.s文件  .c文件 等等(并将通配好的字符串返回给OBJSss)
OBJSss   :=  $(wildcard  start/*.S)  $(wildcard  start/*.c) $(wildcard common/src/*.c) $(wildcard common/src/*.S)  $(wildcard *.c) $(wildcard *.S)
#将上面遍历的字符串内.S全部改名.o [注意:这里只是简单的将包括路径的文件名改名成包括路径的.o文件]  (如)  xxx.S---->xx.o
OBJSs    :=  $(patsubst) %.S,%.o,$(ObjSss)
#将上面剩下的字符串内.c进一步全部改名.o   (如)  xxx.c---->xx.o
OBJS    :=  $(patsubst) %.c,%.o,$(ObjSs)


#----这里要做一下说明来解释下面一行的由来---编译器碰到.s文件的时候会默认自动调编译器自带的汇编器来编译汇编文件
#----在所用的开发平台上有汇编和c的互相调用,不加下面的一行代码,将会出现由于gcc编译器和汇编器的不兼容,在c调用
#----汇编的时候出现问题,所以统一用gcc来编译.c .s文件
#所以必须制定自己的规则来克服这个不兼容  $@代表%.o $<代表%.S  (有默认的目标%.o:%c中的规则生成。还是不明白.c在哪里生成.o的)
%.o: %.S
$(CC) $(CFLAGS) -c -o $@ $<


#all:包含一个伪目标clean 和  $(OBJS)
all:clean  $(OBJS)
$(LD)  $(OBJS) -Tmap.lds -o $(NAME).elf
$(OBJCOPY)  $(NAME).elf -O binary -S  $(NAME).bin 
$(OBJDUMP) -D $(NAME).elf > $(NAME).dis 
#============================================================================#
clean:
rm -rf $(OBJS) *.elf *.bin *.dis *.o
#============================================================================#
阅读(1601) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~