Makefile-强制更新规则指令
FORCE 是一个伪目标,一般是像下面这样定义的
由上面的定义可知,FORCE是个伪目标,它的规则没有依赖没有命令。
如果一个规则里没有依赖也没有命令,并且它的目标不是已存在的文件名,那么每次执行这条规则时,make就认为这个目标被更新,该目标就被视为最新的。
在第一个代码块中,FORCE 做为依赖每次遇到都被认为是最新的,因此目标 vmlinux 也是每次都要被更新(即它的命令必执行,目标必须要比它的依赖还要 " 新 " )
如果一个规则没有命令或者依赖,而且它的目标不是一个存在的文件名。在执行此规则时,目
标总会被认为是最新的。就是说:这个规则一旦被执行, make 就认为它的目标已经被更新过。这
样的目标在作为一个规则的依赖时,因为依赖总被认为被更新过,因此作为依赖所在的规则定义的
命令总会被执行。看一个例子:
clean: FORCE
rm $(objects)
FORCE:
这个例子中,目标“FORCE”符合上边的条件。它作为目标“clean”的依赖出现,在执行 make
时,它总被认为被更新过。所以“clean”所在的规则在被执行时规则所定义的命令总会被执行。
这样的一个目标通常我们将其命名为“FORCE”。
上边的例子中使用“FORCE”目标的效果和我们指定“clean”为伪目标效果相同。两种方式
相比较,使用“.PHONY”方式更加直观高效。这种方式主要用在非 GNU 版本的 make 中。
在使用GNU make,尽量避免使用这种方式。