default: a.foo %.foo: %.correct @echo $@ from $< %.foo: %.mislead @echo $@ from $< %.correct: %.correct_src @echo $@ from $< %.mislead: %.mislead_src @echo $@ from $< a.correct_src: @echo touch $@ # Note that there is no rule to make a.mislead_src # If the misleading_target line is commented out, 'default' succeeds: # > a.correct from correct_src # > a.foo from a.correct # If the line isn't commented out, 'default' fails: # > make: *** No rule to make target 'a.mislead', needed by 'a.foo'. Stop. misleading_target: a.mislead