一份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 

猜你喜欢

转载自blog.csdn.net/haihui1996/article/details/75049162
今日推荐