一份Makefile的詳解

指定編譯器爲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)ObinarySstart.elf @
#將start.elf文件反彙編成start.dis
$(OBJDUMP) -D start.elf > start.dis

%.o:%.S
(CC)c (CPPFLAGS) (CFLAGS) < -o @ (CC) -c (CPPFLAGS) (CFLAGS) <o @
clean:

-C 選項的作用是指將當前工作目錄轉移到你所指定的位置(即cpu),即執行cpu目錄下的Makefile中的clean

make clean -C cpu 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章