$? :比目标的修改时间更晚的那些依赖模块表。
$@ :当前目标的全路径名。可用于用户定义的目标名的相关行中。
$< :比给定的目标文件时间标记更新的依赖文件名。
$* :去掉后缀的当前目标名。例如,若当前目标是pro.o,则$*表示pro。
make默认寻找叫makefile或Makefile的文件,自己指定的话用 make -f 文件名
"#": 注释符
命令行首的"@":取消本行命令回显
1.规则的基本格式:
目标:依赖
[tab]命令 <---------- 命令开头要一个[tab]键
例0:
hello:main.o func1.o func2.o
gcc main.o func1.o func2.o -o hello
上面这两行叫一个规则
2.伪目标(phony taeget): 没有任何依赖,只有执行动作的目标
用".PHONY"显式指明伪目标
.PHONY: clean
clean:
rm -f *.o
可以使用这一特性实现rebuild all
3.变量: (便于修改)
obj=main.o func1.o func2.o
hello:$(obj)
gcc $(obj) -o hello
系统默认变量:
$^ 代表所有依赖文件
$@ 代表目标
$< 代表第一个依赖文件
例0改写如下:
hello:main.o func1.o func2.o
gcc $^ -o $@
4.模式规则
用"%"做通配符
"s%.c"表示所有以s开头,以.c结尾的文件
例:
%.o: %.c
commands
本例指出了如何从所有.c生成相应.o的规则
如果模式规则后不屑任何命令,就取消了这一模式规则的定义