makefile双冒号规则理解
在网上找关于双冒号规则的理解, 答案基本上都是相同的, 看得迷迷糊糊, 直接找到英文重新翻译和整理一下:
一个目标可以出现在多个规则中, 但要求所有的规则必须是同一类型: 要么都是普通规则, 要么是双冒号规则. 双冒号规则与单冒号规则是两种明显不同的规则.
双冒号规则的主要特征 - - 同目标/多规则/彼此独立:
如果这些相同目标的规则是双冒号的, 则其中任意一条规则相对于另外的同目标规则是独立的:
1. 当一条规则中的目标比该规则中的任何一个依赖旧时, 该规则中的方法就会被执行, 但仅仅限于该规则.
2. 如果该规则中的目标没有依赖, 不管目标存在与否, 该规则的方法总是会被执行, 但也仅仅限于该条规则.
同目标的双冒号规则彼此之间相互独立, 每一条规则都分开处理, 就像不同目标不同规则被执行一样.
这种机制, 能够让相同目标的双冒号规则集合中的任何一条方法执行, 或所有方法都执行, 或所有方法都不执行.
其他注意事项:
1. 双冒号规则会按照他们在makefile中出现的顺序来执行, 然而在实际使用中双冒号规则都用在处理顺序无关的的场合.
2. 每一个双冒号规则都要带一个方法, 如果不带的话, 将使用隐含规则.
3. 模式规则带有双冒号时, 将匹配任何满足模式的目标.
双冒号规则解决的问题:
双冒号规则有点晦涩难懂, 也不常用, 主要用在根据不同的依赖条件来使用不同的方法处理同一个目标.