**use as rules' targets (first line of a rule,left of :) the name of resulting file(s)**
One main problem in the OuNuPo makefile is the execution of the tesseract rule, every time another rule requests it (in make lingo has it as a dependency). This a duplication of the same process (ocr), which takes quite some time, and hence we want to avoid repeting, if the scanned images haven't changed.
Make has a very simple way of **avoiding this duplication of a process/rule**.
It is done **carefully defining the rules' target** - the name given to the rule, by which we invoke in order to execute that rule.
By having **the target of a rule take the name of the file(s), which will result from to the rule's execution**, the Makefile, will **check if that file is "out of date"**.
"A target is out of date if it does not exist or if it is older than any of the prerequisites "
If the target/resulting file(s) are **not present**, the dependency rule will be executed
If the target/resulting file(s) are **not present**, the dependency rule will NOT be executed
what follows is a simple example
```
foo.txt:
echo "this is a test" >> foo.txt
@echo "$@ was made"
art: foo.txt
cat foo.txt | figlet
@echo "$@ was made"
```
For the first time you run `make art` the foo.txt dependency rule will be executed
In subsequent runs of `make art` foo.txt dependency rule will NOT be executed, because its target: foo.txt is already in the make working directory