我还是不明白为什么Makefiles中的“假冒”规则有“.PHONY”作为他们的目标。作为先决条件将更合乎逻辑。为什么.PHONY:目标而不是目标:.PHONY?
我必须详细说明吗?如果A
取决于B
和B
是假的,那么A
也是假的。因此,依赖关系图.PHONY
←B
→A
是wawa令人惊讶的,与.PHONY
→B
→A
相比。 (另一个说法是,make
的实现必须处理.PHONY
目标非常特殊。)
尽管这种批评可能看起来相当理论化(毫无意义) - “因为make是如此古老,它的语法在这里停留”。但我不建议任何语法变化,还存在另一种:
随着GNU使(至少),下面的Makefile声明了一个假target_A
:
target_A: _PHONY
touch target_A
_PHONY:
#noop
问题1:这是如此简单而干净,我当然不是它的第一个发明家。实际上,考虑到这个选择,为什么make
需要特殊的语法?
在我看来,这也可以很好地解决有关wildcards in phony targets的问题,甚至可能在shed some light on .PHONY's meaning时,当初学者怀疑时。
问题2:您能想到这种方法较差的情况吗? (?正在调用make .PHONY
任何使用)
(我要指出的是,虽然我已经调用其他make
S,GNU提出的是,我有一些经验与唯一实现 - 读,写Makefile文件)
(应该有RTFM)实际上GNU Make手册[提到这个配方](http://www.gnu.org/software/make/manual/html_node/Force-Targets.html#Force-Targets)高效,但更便携。我猜想速度增益是可以忽略不计的。这表明对问题2的否定答案。(?) – tiwo 2012-07-20 21:25:02