#老师写的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) |