### latex.makefile # Targets: # default : compiles the document to a PDF file using the defined # latex generating engine. (pdflatex, xelatex, etc) # display : displays the compiled document in a common PDF viewer. # (currently linux = evince, OSX = open) # clean : removes the build/ directory holding temporary files PROJECT = pa2cal default: build/$(PROJECT).pdf display: default (${PDFVIEWER} build/$(PROJECT).pdf &) ### Compilation Flags PDFLATEX_FLAGS = -halt-on-error -output-directory build/ TEXINPUTS = .:build/ TEXMFOUTPUT = build/ ### File Types (for dependancies TEX_FILES = $(shell find . -name '*.tex' -or -name '*.sty' -or -name '*.cls') BIB_FILES = $(shell find . -name '*.bib') BST_FILES = $(shell find . -name '*.bst') IMG_FILES = $(shell find . -path '*.jpg' -or -path '*.png' -or \( \! -path './build/*.pdf' -path '*.pdf' \) ) ### Standard PDF Viewers # Defines a set of standard PDF viewer tools to use when displaying the result # with the display target. Currently chosen are defaults which should work on # most linux systems with GNOME installed and on all OSX systems. UNAME := $(shell uname) ifeq ($(UNAME), Linux) PDFVIEWER = evince endif ifeq ($(UNAME), Darwin) PDFVIEWER = open endif ### Clean # This target cleans the temporary files generated by the tex programs in # use. All temporary files generated by this makefile will be placed in build/ # so cleanup is easy. clean:: rm -rf build/ ### Core Latex Generation # Performs the typical build process for latex generations so that all # references are resolved correctly. If adding components to this run-time # always take caution and implement the worst case set of commands. # Example: latex, bibtex, latex, latex # # Note the use of order-only prerequisites (prerequisites following the |). # Order-only prerequisites do not effect the target -- if the order-only # prerequisite has changed and none of the normal prerequisites have changed # then this target IS NOT run. # # In order to function for projects which use a subset of the provided features # it is important to verify that optional dependancies exist before calling a # target; for instance, see how bibliography files (.bbl) are handled as a # dependency. build/: mkdir -p build/ build/$(PROJECT).aux: $(TEX_FILES) $(IMG_FILES) | build/ pdflatex $(PDFLATEX_FLAGS) $(PROJECT) build/$(PROJECT).bbl: $(BIB_FILES) | build/$(PROJECT).aux bibtex build/$(PROJECT) pdflatex $(PDFLATEX_FLAGS) $(PROJECT) build/$(PROJECT).pdf: build/$(PROJECT).aux $(if $(BIB_FILES), build/$(PROJECT).bbl) pdflatex $(PDFLATEX_FLAGS) $(PROJECT)