.PHONY: foo echo PASS phony foo .PHONY: bar .PHONY: test4 # if no foo target, but foo is .PHONY, don't warn # "Circular baz <- foo dependency dropped.". baz: foo echo baz test1: foo bar baz echo PASS test1 from foo bar baz # Actually, you can use .PHONY! test2: .PHONY test3: touch test4 test4: echo PASS test4 # test5 is similar with test1, but foo2 has command. # foo2 runs once to build test5 even if it appears twice # test5 <- foo2, test5 <- baz2 <- foo2. .PHONY: foo2 foo2: echo foo2 baz2: foo2 echo baz2 test5: foo2 bar baz2 echo PASS test5 from foo bar baz