make在执行时,需要一个命名为Makefile的文件。Makefile文件描述了整个工程的编译、链接等规则。其中包括:工程中的哪些源文件需要编译以及如何编译;需要创建哪些库文件以及如何创建这些库文件、如何最后产生我们想要的可执行文件。
例子:有一个工程包含文件main.c和func1.c和 func2.c
hello:main.o func1.o func2.o
gcc main.o func1.o func2.o –o hello
main.o:main.c
gcc -c main.c
func1.o:func1.c
gcc –c func1.c
func2.o:func2.c
gcc –c func2.c
.PHONY:clean
clean:
规则:用于说明如何生成一个或多个目标文件,规则格式如下:
targets:prerequisites
command
目标 依赖 命令
main.o:main.c
gcc –c main.c
makefile中只应该有一个最终目标,第一条规则中的目标将被确立为最终目标。make命令默认在当前目录下寻找名字为makefile或者Makefile的工程文件,当名字不为这两者之一时,可以使用如下方法指定: make –f 文件名
makefile中把那些没有任何依赖项只有执行动作的目标称为“伪目标”(phony targets)。
.PHONY:clean
clean:
rm –f hello main.o func1.o func2.o
“.PHONY”将“clean”目标为伪目标。
obj=main.o func1.o func2.o
hello:$(obj)
在makefile中,存在系统默认的自动化变量
$^:代表所有的依赖项
$@:代表目标
$<:代表第一个依赖文件
hello:main.o func1.o func2.o
func1.o:func1.c
#:@取消回显
hello:hello.c