Makefile工程管理

源码:

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构成-最终目标

  1. 当一个makefile中有多条规则时,如何单独执行某条规则?
  2. 如果用户没有指定执行某一条规则,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 文件名

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/lzw508170827/article/details/87897604
今日推荐