Makefile强制目标(没有命令或依赖的规则)
Makefile中,如果一个规则没有命令或者依赖,并且它的目标不是一个存在的文件名。在执行此规则时,目标总会被认为是最新的。就是说: 这个规则一旦被执行,make就认为它的目标已经被更新过。这样的目标在作为一个规则的依赖时,因为依赖总被认为被更新过,因此作为依赖所在的规则中定义的命令总会被执行。
示例:
1 all: FORCE 2 @echo "****all: FORCE***" 3 4 FORCE:; 5 6 .PHONY: FORCE
在上述例子中,目标 “FORCE” 符合上边的条件,它属于一个强制目标。“FORCE” 作为目标“all”的依赖,在执行make时,“FORCE” 总被认为被更新过。因此 “all” 所在规则在被执行时其所定义的命令总是会被执行。这样的被其他目标依赖的目标通常我们将其命令为“FORCE”。
上边的例子中使用 "FORCE" 目标的效果和将 “all” 声明为伪目标的效果相同。强制目标应该谨慎使用。