Boost.Asio C++ 网络编程中的双冒号规则详细解析

3.13 双冒号规则解析

双冒号规则是使用“::”替代普通规则的“:”得到的规则。与普通规则不同,双冒号规则允许为同一目标指定不同的重建命令,并且在同一文件中处理过程也有所差异。

规则定义的差异

  1. 在双冒号规则中,当依赖文件更新时,规则将被执行。如果目标没有依赖文件,每次引用此目标时都会无条件执行命令。而普通规则中,当目标文件存在且最新时,命令不会被执行。

  2. 同一个文件作为多个双冒号规则的目标时,这些规则将被独立处理。不同于普通规则的合并方式,每个双冒号规则的依赖文件改变后,只执行该规则命令,而不影响其他规则。来看以下示例:

Newprog :: foo.c
t$(CC) $(CFLAGS) $< -o $@
Newprog :: bar.c
t$(CC) $(CFLAGS) $< -o $@

如果foo.c被修改,Newprog将依据foo.c进行重建。同理,如果bar.c被修改,Newprog将根据bar.c重建。与普通规则不同,这样的规则不会因为目标文件的重复定义导致错误。

执行顺序

与普通规则类似,双冒号规则的执行顺序遵循Makefile中的书写顺序。

pdf 文件大小:1.29MB