Esta é a minha própria resposta, derivada da ideia apresentada por Filipe Brandenburger e dos métodos genéricos utilizados no sistema Schily Makefile:
O sistema makefile garante que os seguintes make macros
estejam configurados desta maneira:
WAIT= # empty with GNU make
WAIT= .WAIT # .WAIT special target with SunPro Make
MAKEPROG= <name of the make program> # This is from: smake, gmake, sunpro
_UNIQ= .XxZzy-
Agora o makefile que faz uso das definições de macro acima:
_NORULE= $(_UNIQ)$(MAKEPROG)
__NORULE= $(_NORULE:$(_UNIQ)gmake=)
NORULE= $(__NORULE:$(_UNIQ)%=%)
install: dir $(WAIT) dir/file
dir/file: source
cp source dir/file
dir:
mkdir -p dir
$(NORULE)dir/file: | dir
$(NORULE)
se expande para nada com o gmake e para sunpro
com o SunPro Make.
No caso do gmake, todo o makefile se expande para:
install: dir dir/file
dir/file: source
cp source dir/file
dir:
mkdir -p dir
dir/file: | dir
No caso do SunPro Make, todo o makefile se expande para:
install: dir .WAIT dir/file
dir/file: source
cp source dir/file
dir:
mkdir -p dir
sunprodir/file: | dir
A última linha é vista como uma regra de lixo eletrônico sem relevância.