4编写规则
4.1
规则的语法
targets:preresquisites
command
...
或
targets:prerequisites; command
command
...
命令行以Tab字符开始;命令与依赖之间用分号隔开;依赖中的文件时间信息晚于目标文件,则目标文件需要更新。
文件名可使用通配符。
4.2
在文件名中使用通配符
make中的通配符与Bourne shell 中的一样。反斜杠'\'使通配符失去通配能力。
wildcard 函数 设置在变量或函数中的通配符一般不能正常扩展,这时需要使用wildcard函数。
$(wildcard pattern...)
patsubst 函数
字符串替换和分析函数。
eg. 将C语言源程序文件'.c'后缀变为'.o'后缀。
$(patsubst %.c, %.o, $(wildcard *.c))
4.3
在目录终端搜寻依赖
VPATH:所有依赖的搜寻路径,一般为包含目录,非当前目录。
目录与目录以冒号或空格分开,但在Win系中以分号分开。
vpath pattern directories 对一定格式类型的文件制定一个搜寻路径。
vpath pattern
清除和一定类型格式相联系的搜寻路径
vpath
清除所有由vpath指令制定的搜寻路径。
'$^' 代表所有的依赖列表,包含寻找依赖的目录。
'$@' 代表目标
'-|name'
连接库的目录搜寻。缺省搜寻'libname.so'和'libname.a',缺省值由.LIBPATTERNS变量控制。
4.4
假想目标
.PHONY
假想目标不是一个需要根据别的文件重新创建的时间文件,所以他将跳过隐含规则搜寻假象目标的步骤。提高了效率,且不用担心目录下有同名文件存在。
4.5
没有命令或依赖规则
如果一个规则米有依赖、也没有命令,而且这个规则的目标不是一个存在的文件,则make认为
只要这个规则允许,该目标就已被更新。
eg.
clean:FORCE
rm $(objects)
FORCE:
4.6
使用空目标文件记录事件
与假想目标类似,除了有依赖,还有文件。
eg.
print: foo.c bar.c
lpr
-p $?
touch print
4.7
内建的特殊目标名
<a> .PHONY
依赖是假想目标
<b>
.SUFFIXER
依赖是一系列用于后缀规则检查的后缀
<c>
.FRECIOUS
<d>
.INTERMEDIATE
依赖被处理为中间文件,无依赖文件,则不发生作用
<e>
.SECONDARY
依赖被处理为中间文件,无依赖文件,则所有makefile文件中的目标都将被处理为中间文件。
<f>
.DELETE_ON_ERR
<g>
.IGNORE
忽略处理依赖文件测错误或所有处理文件的错误。
<h>
.SILENT 不回显重新构造文件的命令。
<i>
.EXPORT_ALL_VARIABLES
<j>
.NOTPATALLEL
4.8 具有多个目标的规则
具有多个目标的规则等同于写多条规则,这些规则除了目标不同之二为,其余部分完全相同。
4.9
具有多条规则的目标
待续
4.10
静态规则