隐含规则
隐含规则是一种惯例,一种隐含的,早约定好的,不需要再写出来的规则。例如把.c文件编译成.o文件。隐含规则会使用一些系统变量,可以改变这些系统变量的值来定制隐含规则的运行时参数,如系统变量CFLAGS可以控制编译时的编译器参数。可以通过模式规则的方式写下自己的隐含规则,显得智能和清楚。用后缀规则定义隐含规则会有许多限制,但可以保证Makefile的兼容新。
使用隐含规则
例:
foo:foo.o bar.o
cc -g foo foo.o bar.o $(CFLAGS) &(LDFLAGS)
make的隐含规则会自动推导foo.o和bar.o这两个目标的依赖文件和生成命令。make在自己的隐含规则库中寻找可以用的规则,有就用,找不到就报错。
如果伪.o文件书写了规则,那么make就不会自动推导并调用隐含规则,按照写好的规则执行。
隐含规则一览
如果不明确的写下规则,那么make就在所有预设的隐含规则中寻找所需要的规则和命令。可以使用make的参数-r或--no-builtin-rules选项来取消所有的预设值的隐含规则。即使使用了-r参数,某些隐含规则还是会生效的,因为许多隐含是使用后缀规则来定义的。默认的后缀列表(在后缀列表中的隐含规则生效)有:.out、.a、.ln、.o、.c、.cc、.C、.p、.f、.F、.r、.y、.l、.s、.S、.mod、.sym、.def、.h、.info、.fvi、.tex、.txeinfo、.texi、.txinfo、.w、.ch、.web、.sh、.elc、.el。
常用隐含规则:
- 编译C程序的隐含规则
文件名.o的依赖目标会自动推导为文