.SUFFIXES: GCC_FLAGS := -g -O0 -Wall all: it2-out # it0-out.py => Hand made it1-out0.py: it0-out.py it1-in.lang0 cat it1-in.lang0 | python3 it0-out.py > it1-out0.py it1-out1.py: it1-out0.py it1-in.lang0 cat it1-in.lang0 | python3 it1-out0.py > it1-out1.py # We can diff here since the target hasn't changed # The target for it0 is the same as for it1 diff it1-out0.py it1-out1.py it1-out2.py: it1-out1.py it1-in.lang0 cat it1-in.lang0 | python3 it1-out1.py > it1-out2.py diff it1-out1.py it1-out2.py it1-out3.py: it1-out2.py it1-in.lang0 cat it1-in.lang0 | python3 it1-out2.py > it1-out3.py diff it1-out2.py it1-out3.py it1-out.py: it1-out3.py cp it1-out3.py it1-out.py it2-out0.py: it1-out.py it2-in.lang0 cat it2-in.lang0 | python3 it1-out.py > it2-out0.py # No gcc step since the target is still python here it2-out1.c: it2-out0.py it2-in.lang0 cat it2-in.lang0 | python3 it2-out0.py > it2-out1.c # diff it2-out0.py it2-out1.py Do not diff - the target changed so the output will be different it2-out1: it2-out1.c gcc it2-out1.c -o it2-out1 $(GCC_FLAGS) it2-out2.c: it2-out1 it2-in.lang0 cat it2-in.lang0 | ./it2-out1 > it2-out2.c diff it2-out1.c it2-out2.c it2-out2: it2-out2.c gcc it2-out2.c -o it2-out2 $(GCC_FLAGS) it2-out3.c: it2-out2 it2-in.lang0 cat it2-in.lang0 | ./it2-out2 > it2-out3.c diff it2-out2.c it2-out3.c it2-out3: it2-out3.c gcc it2-out3.c -o it2-out3 $(GCC_FLAGS) it2-out: it2-out3 cp it2-out3 it2-out clean: -rm it1-out* it2-out*