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” 声明为伪目标的效果相同。强制目标应该谨慎使用。

原文地址:https://www.cnblogs.com/merlindu/p/6957258.html