在上面的例子中,如果文件 .c
存在,那么就直接调用C的编译器的隐含规则,如果没有 .c
文件,但有一个 .y
文件,那么Yacc的隐含规则会被调用,生成 .c
文件,然后,再调用C编译的隐含规则最终由 .c
生成 文件,达到目标。
在默认情况下,对于中间目标,它和一般的目标有两个地方所不同:第一个不同是除非中间的目标不存在,才会引发中间规则。第二个不同的是,只要目标成功产生,那么,产生最终目标过程中,所产生的中间目标文件会被以 rm -f
删除。
你也可以阻止make自动删除中间目标,要做到这一点,你可以使用伪目标 .SECONDARY
来强制声明(如: .SECONDARY : sec
)。你还可以把你的目标,以模式的方式来指定(如: )成伪目标 .PRECIOUS
的依赖目标,以保存被隐含规则所生成的中间文件。
Make会优化一些特殊的隐含规则,而不生成中间文件。如,从文件 foo.c
生成目标程序 foo
,按道理,make会编译生成中间文件 foo.o
,然后链接成 foo
,但在实际情况下,这一动作可以被一条 cc
的命令完成( ),于是优化过的规则就不会生成中间文件。