Gnu make手册学习【4】——编写规则

时间:2022-09-01 23:08:52
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 静态规则