Makefile文件格式
Make的工作主要依赖于一个叫Makefile的文件。Makefile文件描述了整个程序的编译、链接等规则。
1 make命令
1.1、make命令的选项和参数
-k:作用是让make命令在发现错误时仍然继续执行。可以利用这个选项在一次操作中发现所有未编译成功的源文件。
-n:作用是让make命令输出将要执行的操作步骤,而不真正执行这些操作。
-f <filename>:作用是告诉make命令将哪个文件作为nakefile文件。如果未使用这个选项,标准版的make命令将首先在当前目录下查找名为makefile文件,如果没有,就会查找名为Makefile的文件。
1.2 make规则
所有行开头的空格必须是TAB,所有行结尾不允许有空格
2 Makefile
2.1、Makefile格式
目标 : 依赖文件合集......
命令1
命令2
......
例:
main : main.o input.o calcu.o
gcc -o main main.o input.o calcu.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
Makefile中变量的引用方法是 “$(变量名)”,
比如本例中的“$(obj)”。
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 = .; 定义变量=当前位置地址 }