cleared the read me file for xpub
parent
3deaaeac0b
commit
6f2b648fe4
@ -1,3 +1,4 @@
|
|||||||
images/**
|
images/**
|
||||||
output/**
|
output/**
|
||||||
src/index.json
|
src/index.json
|
||||||
|
.DS_Store
|
@ -0,0 +1,80 @@
|
|||||||
|
# Makefile Documentation
|
||||||
|
|
||||||
|
## SYNTAX: AUTOMATIC VARIABLES
|
||||||
|
https://www.gnu.org/software/make/manual/html_node/Automatic-Variables.html
|
||||||
|
|
||||||
|
* $@ file name of the target of the rule.
|
||||||
|
* $< name of the first prerequisite.
|
||||||
|
* $? names of all the prerequisites that are newer than the target, with spaces between .
|
||||||
|
* $^ names of all the prerequisites,
|
||||||
|
* $(@D) directory part of the file name of the target,
|
||||||
|
|
||||||
|
## SYNTAX: PRINTING / ERRORS
|
||||||
|
@ preceeding command tells make not to print the command being executed
|
||||||
|
- preceeding a command tells make to ignore errors in a recipe line
|
||||||
|
|
||||||
|
|
||||||
|
## DEPENDENCIES AND RULES
|
||||||
|
a rule "asks" a *dependency* to be executed, only if the depency does not exist as a file
|
||||||
|
i.e. I have the 2 following rules in my make file:
|
||||||
|
|
||||||
|
```
|
||||||
|
list.txt:
|
||||||
|
ls . -1 > $@
|
||||||
|
|
||||||
|
tts: list.txt
|
||||||
|
cat $< | espeak
|
||||||
|
```
|
||||||
|
when i run: `make tts`
|
||||||
|
tts rule will execute its dependency list.txt IF the list.xt does not exist in the top level of working directory. ELSE it will execute the list.txt
|
||||||
|
|
||||||
|
|
||||||
|
## TARGET NAMES
|
||||||
|
**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
|
||||||
|
To trigger the execution of foo.txt rule, we need to remove its target from the working directoy
|
||||||
|
That task if often delegate to a rule with target `clean` which removes the files/targets of make, such as
|
||||||
|
|
||||||
|
```
|
||||||
|
clean: removes output (target) files
|
||||||
|
rm ocr/output.txt
|
||||||
|
rm $(wildcard output/*)
|
||||||
|
rm $(tmpfile)
|
||||||
|
```
|
||||||
|
|
||||||
|
After running `make clean` the foo.txt rule is executed (as a dependancy) when running `make art`
|
||||||
|
|
||||||
|
Targets can also include subfolders:
|
||||||
|
|
||||||
|
```
|
||||||
|
output/art.txt: foo.txt
|
||||||
|
cat foo.txt | figlet > $@
|
||||||
|
@echo "$@ was made"
|
||||||
|
```
|
||||||
|
which can be invoked by `make output/art.txt`
|
||||||
|
|
||||||
|
Read more on https://www.gnu.org/software/make/manual/html_node/Rule-Syntax.html#Rule-Syntax
|
||||||
|
|
||||||
|
# LINKS
|
||||||
|
* About Makefile syntax: [5 Writing Recipes in Rules](https://www.gnu.org/software/make/manual/make.html#Recipes)
|
Loading…
Reference in New Issue