我仍然不明白为什么 Makefile 中的“假”规则将“.PHONY”作为他们的目标。作为先决条件,这将更加合乎逻辑。
我必须详细说明这一点吗?如果A
依赖B
并且B
是假的,那么A
也是假的。所以依赖图.PHONY
←<code>B→<code>A 与 →<code>B→<code>A 相比是非常令人惊讶.PHONY
的。(另一个论点是make
必须处理.PHONY
非常特殊的目标。)
虽然这种批评可能看起来相当理论化(毫无意义) - “既然 make 是如此古老,它的语法就在这里留下来”。但我不建议任何语法更改,还有另一种选择:
使用 GNU Make(至少),以下 Makefile 声明了一个 phony target_A
:
target_A: _PHONY
touch target_A
_PHONY:
#noop
问题 1:这很简单,很干净,我肯定不是它的第一个发明者。事实上,考虑到这种选择,为什么make
需要特殊语法?
在我看来,这也可以很好地解决有关虚假目标中通配符的问题,甚至可以在初学者怀疑时阐明 .PHONY 的含义。
问题2:您能想到这种方法劣势的任何情况吗?(调用make .PHONY
有什么用吗?)
(我应该提到,虽然我调用了其他make
s,但 GNU Make 是我唯一有经验的实现 - 读取和编写 Makefile。)