$(shell \ mkdir -p src/subd; \ mkdir subd; \ touch dummy; \ sleep 2; \ touch subd/test.out src/subd/test.in2; \ sleep 2; \ touch subd/test.out2 src/subd/test.in; \ sleep 2; \ touch subd/host_test.out subd/host_test.out2; \ sleep 2; \ touch host_prog; \ ) VPATH = src all: prog host_prog prog dir/ test "$@" = "all" test "$<" = "prog" test "$^" = "prog host_prog dir" test "$?" = "prog host_prog dir" test "$+" = "prog host_prog prog dir" test "$(@D)" = "." test "$(@F)" = "all" test "$($@ %.out2: %.in2 dummy @echo TEST_FAIL No need to remake .PHONY: all