Makefile工具的使用( 七 )


prog2 : prog2.o
cc -o prog2 prog2.o
prog3 : prog3.o sort.o utils.o
cc -o prog3 prog3.o sort.o utils.o
这样,使用"make"将可以将三个程序都生成了 。
当一个phony目标是另一个的依赖,其作用相当于子程序,例如:
.PHONY: cleanall cleanobj cleandiff
cleanall : cleanobj cleandiff
rm program
cleanobj :
rm *.o
cleandiff :
rm *.diff
3.6FORCE目标
当规则没有依赖关系也没有命令,而且其目标不是存在的文件名,make认为此规则运行时这个目标总是被更新 。这意味着如果规则依赖于此目标,其命令总是被执行 。
clean: FORCE
rm $(objects)
FORCE:
例中目标"FORCE"满足这种特殊条件,这样依赖于它的目标"clean"被强制执行其命令 。名字"FORCE"没有特殊含义,只不过通常这样用而已 。这种方式使用"FORCE"和".PHONY : clean"效果相同 。使用".PHONY"更加明确高效,担不是所有的"make"都支持;这样许多makefile中使用了"FORCE" 。
3.7空目标
空目标(empty target)是phony目标的变种:用来执行显式请求的一个动作 。和phony目标不同的是:这个目标文件可以真实存在,担文件的内容无关紧要,通常是空的 。空目标文件的目的是利用其最后修改时间来记录命令最近一次执行的时间,这是通过使用"touch"命令更新目标文件来达到的 。
print: foo.c bar.c
lpr -p $?
touch print
利用这条规则,执行"make print"时如果自上次"make print"之后任一文件改变了,"lpr"命令会执行 。自动变量"$?"是为了只打印出那些变化了的文件 。
3.8内建的特殊目标
某些名字作为目标存在时有特殊含义 。

推荐阅读