make的工作主要依赖于makefile文件。makefile文件描述了整个程序的编译、链接等规则。
makefile中最重要的组成是“规则”。
规则:用于说明如何生成目标文件,规则的格式。如:
目标:依赖
命令
其中命令前的空白是一个Tab键。
伪目标
伪目标是这样一个目标:它不代表一个真正的文件名,在执行make时可以指定这个目标来执行其所在规则定义的命令,有时也可以将一个伪目标称为标签。用“.PHONY”声明。如:
.PHONY:clean
clean:
rm -f hello main.o func.o
最终目标
单独执行某一条规则:make 目标
比如对于规则
led.o:led.S
arm-linux-gcc -g -o led.o -c led.S
可通过运行make led.o 单独执行该规则。
若运行make ,则执行makefile中第一条规则,且这条规则中的目标称之为最终目标。
makefile中变量
在makefile中,变量就是一个名字(类似与C语言中的宏),代表一个文本字符串。
在makefile的目标,依赖,命令中引用一个变量的地方,变量会被它的值取代。
使用变量前:
app1:app1.o func1.o func2.o
gcc app1.o func1.o func2.o -o app1
使用变量后
obj=func1.o func2.o
app1:app1.o $(obj)
gcc app1.o $(obj) -o app1
系统存在定义好的默认变量
$^ :代表所有的依赖文件
$@ :代表目标
$< :代表第一个依赖文件
使用前:
led.o:led.S
arm-linux-gcc -g -o led.o -c led.S
使用后:
led.o:led.S
arm-linux-gcc -g -o $@ -c $^
makefile使用技巧
回显:makefile在执行某条规则时,默认会显示所执行规则的命令,这称为回显。
去回显:在命令前加@,比如:
hello:hello.c
@gcc hello.c -o hello
makefile中“#”字符后内容为注释
makefile命令默认在当前目录下寻找名称为Makefile或makefile的工程文件,当名称不为这两者之一时,可使用如下方法指定:make -f 文件名