1. makefile 文件描述了整个工程的编译,链接等规则。
规则:用于说明如何生成一个或多个目标文件,规则格式如下:
targets: prerequisites
command
command
目标 : 依赖
命令 (命令需要以[TAB]键开始)
命令 (命令需要以[TAB]键开始)
例:
main.o: main.c
gcc -c main.c
main.o: main.c
gcc -c main.c
2. 目标:
Makefile 中只应该有一个最终目标,其他目标都是被这个目标所带出来的
。
一般,第一条规则中的目标将被认为是最终目标。
3. 文件名:
make 命令默认在当前目录下寻找名字为makefile或Makefile的文件。
或使用:
make -f 指定文件名。
make -f 指定文件名。
4. 伪目标:
Makefile中把那些没有任何依赖的只有执行动作的目标称为“伪目
标”(phony targets).
如:
.PHONY: clean ( .PHONY 将 clean 目标声明为伪目标)
clean:
rm -f hello main.o
.PHONY: clean ( .PHONY 将 clean 目标声明为伪目标)
clean:
rm -f hello main.o
5. 变量:
obj=main.o func1.o func2.o
hello:$(obj)
gcc $(obj) -o hello
gcc $(obj) -o hello
在makefile中,存在系统默认的自动化变量
$^ --- 代表所有的依赖文件
$@ --- 代表目标
$< --- 代表第一个依赖文件
$@ --- 代表目标
$< --- 代表第一个依赖文件
例:
hello: main.o func1.o func2.o
gcc main.o func1.o func2.o
==>
hello: main.o func1.o func2.o
gcc $^ -o $@
hello: main.o func1.o func2.o
gcc main.o func1.o func2.o
==>
hello: main.o func1.o func2.o
gcc $^ -o $@
6. 杂项:
a. Makefile 中 “#” 字符后的内容被视为注释。
b. @ --- 取消回显,不会显示命令信息。
如:
hello: hello.c
@gcc hello.c -o hello
@gcc hello.c -o hello