Make的工作主要依赖于一个叫Makefile的文件。Makefile文件描述了整个程序的编译、链接等规则。
1、Makefile格式
targets : prerequisites
command
targets:目标
prerequisites:依赖
command:命令,命令需要使用[TAB]键空格
例:
led.elf : led.o
arm-linux-ld -Tled.lds -o led.elf led.o
2、Makefile构成-伪目标
Makefile把那些只包含命令,没有任何依赖的目标称为“伪目标”.
.PHONY : clean clean : rm -f hello main.o func.o
3、 Makefile构成-最终目标
- Make led.o //在Makefile查找目标为led.o的规则并执行。
- Make //默认执行第一条规则,第一条规则的依赖文件找不到的话,自动执行目标文件为第一条规则的依赖文件的规则。
- 用户自定义的变量
4、Makefile构成-自定义变量
使用变量前:
app1: app1.o func1.o func2.o -o app1 gcc app1.o func1.o func2.o -o app1 app2: app2.o func1.o func2.o -o app2 gcc app2.o func1.o func2.o -o app2
使用变量后:
obj=func1.o func2.o app1: app1.o $(obj) gcc app1.o $(obj) -o app1 app2: app2.o $(obj) gcc app2.o $(obj) -o app2
5、系统定义好的变量
$^:代表所有的依赖文件
$@:代表目标
$<:代表第一个依赖文件
使用前:
led.o : led.S arm-linux-gcc -g -o led.o -c led.S
使用后:
led.o : led.S arm-linux-gcc -g -o $@ -c $^
6、Makefile构成-通配符
%.o //表示所有以.o结尾的文件
%.c //表示所有以.c结尾的文件
%.s //表示所有以.s结尾的文件
……
1.1.6. Makefile使用技巧
- 注释:“#注释内容”
- 去回显:命令前加“@”
1.1. 链接器脚本
SECTION{ . = 0x30000000 # .是指当前地址,在此处设置起始链接地址为0x30000000 . = ALING(4); #设置4字节对齐 .text: #代码段 { start.o(.text) #代码段0地址执行的程序名 *(.text) } . = ALING(4) #设置4字节对齐 .data: #数据段 { *(.data) } . = ALING(4) #设置4字节对齐 bss_start = .; #定义变量=当前位置地址 .bss: #BSS段 { *(.bss) } bss_end = .; 定义变量=当前位置地址 }