源码:
all: led.o
arm-linux-ld -Tled.lds -o led.elf led.o
arm-linux-objcopy -O binary led.elf led.bin
led.o : led.S
arm-linux-gcc -g -o led.o -c led.S
.PHONY: clean
clean:
rm *.o led.elf led.bin
Makafile构成-规则
规则:用于说明如何生成目标文件,规则的格式如下:
目标:依赖
规则
led.elf : led.o
arm-linux-ld -Tled.lds -o led.elf led.o
Makefile构成-伪目标
Makefile中把那些只包含命令,没有任何依赖的目标称为“伪目标”
.PHONy:clean
clean:
rm -f hello main.o func.o
".PHONy"将"clean"目标声明为伪目标
Makefile构成-最终目标
- 当一个makefile中有多条规则时,如何单独执行某条规则?
- 如果用户没有指定执行某一条规则,make会默认执行makefile中的第1条规则,而这条规则中的目标称之为:最终目标
make led.o
arm-linux-gcc -g -o led.o -c led.S
Makefile规则-变量
使用变量前:
app1: app1.o func1.o func2.o
gcc app1.o func1.o func2.o -o app1
app2: app2.o func1.o func2.o
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中,用户除了可以自己定义变量外,还可以使用存在系统已经定义好的默认变量。
- $^:代表所有的依赖文件
- $@:代表目标
- $<:代表第一个依赖文件
使用前:
led.o : led.S
arm-linux-gcc -g –o led.o -c led.S
使用后:
led.o : led.S
arm-linux-gcc -g –o $@ -c $^
Makafile构成-通用规则
led.o : led.S
arm-linux-gcc -g –o $@ -c $^
fun.o : fun.S
arm-linux-gcc -g –o $@ -c $^
main.o : main.S
arm-linux-gcc -g –o $@ -c $^
相当于
%.o : %.S
arm-linux-gcc -g –o $@ -c $^
使用技巧-去回显
Makefile中:
-
#:字符后的内容被视作注释。
-
@:取消回显
hello: hello.c @gcc hello.c –o hello
使用技巧-文件名
make命令默认在当前目录下寻找名字为makefile或者Makefile的工程文件,当名字不为这两者之一时,可以使用如下方法指定:
make –f 文件名