.PHONY: all all: binary .INTERMEDIATE: binary.tmp binary.tmp: objfile | sharedlib @touch binary.tmp @echo Link new binary binary: binary.tmp @cp binary.tmp binary @echo Install binary objfile: @touch objfile @echo Compile source file sharedlib: sharedobj @touch sharedlib @echo Link shared library sharedobj: yacc.grammer @touch sharedobj @echo Compile language file yacc.grammer: language @echo Run YACC and see if anything has changed @cmp -s yacc.grammer language || { echo Updated Language ; cp language yacc.grammer ;} language: echo 1 > language