指定編譯器爲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
#將start.elf文件反彙編成start.dis
$(OBJDUMP) -D start.elf > start.dis
%.o:%.S
clean:
-C 選項的作用是指將當前工作目錄轉移到你所指定的位置(即cpu),即執行cpu目錄下的Makefile中的clean
make clean -C cpu