Hello, Order of static pattern rules is significant while IMHO it should not be.
Observe the following (below): the same rules are written in reverse order for foo and bar, and the automatic variable $* has not the same value in the two recipes: jupiter% cat Makefile OBJfoo := foo100.z1 OBJbar := bar200.z1 all : ${OBJfoo} ${OBJbar} # foo100.z0 and bar200.z0 presumably do exist, and *.z1 don't ${OBJfoo} : foo%.z1 : foo%.z0 ${OBJfoo} : %.z1 : %.z0 @echo $* "(foo100 is expected and foo100 is obtained)" # # same rules, with reversed order: ${OBJbar} : %.z1 : %.z0 @echo $* "(bar200 is expected but 200 is obtained instead)" ${OBJbar} : bar%.z1 : bar%.z0 # jupiter% touch foo100.z0 bar200.z0; rm -f foo100.z1 bar200.z1 jupiter% make foo100 (foo100 is expected and foo100 is obtained) 200 (bar200 is expected but 200 is obtained instead) jupiter% make --version | head -1 GNU Make 4.4.1 jupiter% The output of 'make -p' seems to infer that '$*' is filled with the last pattern rule encountered, even if this is not the one with the recipe. Is it intended behavior?