> ===========================================
> all : copy1 copy2 copy3 copy4
>
> copy1: Makefile
> { test -f copy1 && test ! copy1 -ot Makefile; } || { rm -f copy4;
> $(MAKE) copies; }
> copy2: copy1
> { test -f copy2 && test ! copy2 -ot copy1; } || { rm -f copy4; $(MAKE)
> copies; }
> copy3: copy2
> { test -f copy3 && test ! copy3 -ot copy2; } || { rm -f copy4; $(MAKE)
> copies; }
> copy4: copy3
> { test -f copy4 && test ! copy4 -ot copy3; } || { rm -f copy4; $(MAKE)
> copies; }
>
> copies:
> install -c -m 644 Makefile copy1
> install -c -m 644 Makefile copy2
> install -c -m 644 Makefile copy3
> install -c -m 644 Makefile copy4
> .PHONY: copies
> ===========================================
>
> This solution fulfils all the requirements.
It can be simplified a bit. And remove verbosity:
===========================================
all : copy1 copy2 copy3 copy4
copy1: Makefile
@{ test -f copy1 && test ! copy1 -ot Makefile; } || $(MAKE) copies
copy2: copy1
@{ test -f copy2 && test ! copy2 -ot copy1; } || $(MAKE) copies
copy3: copy2
@{ test -f copy3 && test ! copy3 -ot copy2; } || $(MAKE) copies
copy4: copy3
@{ test -f copy4 && test ! copy4 -ot copy3; } || $(MAKE) copies
copies:
install -c -m 644 Makefile copy1
install -c -m 644 Makefile copy2
install -c -m 644 Makefile copy3
install -c -m 644 Makefile copy4
.PHONY: copies
===========================================