看第一个Makefile:
1 2 3 4 5 6 7 8 9 10 11 12  | $ cat Makefiledefine aall:        ifeq (1,1)        echo emmendifendef$(eval $(a))$ makeMakefile:8: *** extraneous 'endif'.  Stop. | 
可以看到ifeq(1,1)被当成rule了,Makefile没有做任何的处理。导致多余的endif。注意Make对所有的TAB开头的行都当做rule处理。不会当成Makefile的语法Parse。但是define内部的被当成define的内容。注意:endef也不能以TAB开头。否则提示:
Makefile:1: *** missing 'endef', unterminated 'define'. Stop.
第二个Makefile:
1 2 3 4 5 6 7 8 9  | $ cat Makefileall: a b;a:        echo a > b$ makeecho a > b | 
执行Make的时候,b文件不存在,但是没有报错,因为执行a目标产生了b文件。所以
make: *** No rule to make target 'b', needed by 'all'. Stop.
做这种检查的时机是很晚的,其它target会被得到执行。