为什么需要makefile
使用GNU make工具来管理程序是每个Linux工程师必须掌握的技能。
make能够使整个程序的编译、连接只需要一个命令(make)就可以完成。
用途:
make工作主要依赖于一个叫为Makefile的文件。Makefile文件描述了整个程序的编译,连接等规则。其中包括:工程中的那些源文件需要编译以及如何编译,如何最后产生我们想要得可执行文件。
makefile构成
规则
用于说明如何生成目标文件,规则的格式如下:
targets:prerequisites
command
目标 依赖 命令(命令使用TAB键空格)
伪目标
Makefile中把那些只包含命令,没有任何依赖的目标称为伪目标
如下所示:
.PHONY: clean
clean:
rm *.o led.elf led.bin led.dis
“.PHONY” 将“clean”目标声明为伪目标
最终目标
指定makefile生成某一个目标。直接在make命令后面直接添加目标文件。如下:
如果用户没有指定执行某一条规则,make会默认执行makefile中的第1条规则,而这条规则中的目标称之为:最终目标
变量
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 $^
使用技巧
去回显
makefile中"#"字符后的内容被视作注释。
取消回显需要在命令前加上一个@符号。
如下所示:
文件名
make命令默认在当前目录下寻找名字为 makefile或者Makefile的工程文件,当名字不为这两者之一时,可以使用如下方法指定:
make -f 文件名
如下所示: