指定编译器为arm-linux-gcc,链接器为arm-linux-ld,用arm-linux-objcopy 来将ELF格式的可执行文件转换为二进制文件.
CC = arm-linux-gcc
LD = arm-linux-ld
OBJCOPY = arm-linux-objcopy
OBJDUMP = arm-linux-objdump
指定库文件,”-l” 用来链接放在/lib和/usr/lib和/usr/local/lib里的库,”-L” 用来链接放置在其他位置的库
LIB :=-lgcc -lgcc_eh -L/usr/local/arm/lib/gcc/arm-none-linux-gnueabi/4.5.1
指定头文件位置
INCLUDEDIR := $(shell pwd)/include/
C语言编译选项: -nostdinc 不要在标准系统目录中寻找头文件.只搜索`-I’选项指定的目录(以及当前目录,如果合适).
CPPFLAGS := -nostdinc -nostdlib -I$(INCLUDEDIR)
C语言编译选项,不使用C语言内建函数、显示全部警告、优化等级为0
CFLAGS := -fno-builtin -Wall -O0
用export声明这些变量使得他们可以被子目录的Makefile使用
export CC LD OBJCOPY CPPFLAGS CFLAGS
对象文件
OBJS := cpu/start.o cpu/main.o lib/uart.o lib/libc.a
目标:依赖文件列表
all:start.bin clean
start.bin:(OBJS)
#设置代码段的起始地址为0x40000000 链接生成start.elf文件,(LD) -Ttext=0x40000000
(OBJS)−ostart.elf
(LIB)
(OBJCOPY)−Obinary−Sstart.elf
@
#将start.elf文件反汇编成start.dis
$(OBJDUMP) -D start.elf > start.dis
%.o:%.S
(CC)−c
(CPPFLAGS)
(CFLAGS)
< -o
@
(CC) -c
(CPPFLAGS)
(CFLAGS)
<−o
<script type="math/tex" id="MathJax-Element-8">< -o </script>@
clean:
-C 选项的作用是指将当前工作目录转移到你所指定的位置(即cpu),即执行cpu目录下的Makefile中的clean
make clean -C cpu