diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index ce48ee8..0000000 Binary files a/.DS_Store and /dev/null differ diff --git a/.gitignore b/.gitignore index 3157fa1..179921c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ images/** output/** src/index.json +.DS_Store \ No newline at end of file diff --git a/HELP-makefile.md b/HELP-makefile.md new file mode 100644 index 0000000..a34ceb1 --- /dev/null +++ b/HELP-makefile.md @@ -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) diff --git a/README b/README index 14cb368..83eff8c 100644 --- a/README +++ b/README @@ -1,86 +1,8 @@ +# OuNuPo Make +(Description of makefile) -# Tools for scanned pages -Get help on the different makefile targets by running: -`make` +## License -# Makefile Documentation +# Authors -## 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)