### latex.makefile # Author: Jason Hiebel # This is a simple makefile for compiling LaTeX documents. The core assumption # is that the resulting documents should have any parameters effecting # rendering quality set to theoretical limits and that all fonts should be # embedded. While typically overkill, the detriment to doing so is negligible. # 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 obj/ directory holding temporary files PROJECT = Thesis default: obj/$(PROJECT).pdf display: default (${PDFVIEWER} obj/$(PROJECT).pdf &) ### Compilation Flags PDFLATEX_FLAGS = -halt-on-error -output-directory obj/ TEXINPUTS = .:obj/ TEXMFOUTPUT = obj/ ### 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 './obj/*.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 obj/ # so cleanup is easy. clean:: rm -rf obj/ ### 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. obj/: mkdir -p obj/ obj/$(PROJECT).aux: $(TEX_FILES) $(IMG_FILES) | obj/ xelatex $(PDFLATEX_FLAGS) $(PROJECT) obj/$(PROJECT).bbl: $(BIB_FILES) | obj/$(PROJECT).aux bibtex obj/$(PROJECT) xelatex $(PDFLATEX_FLAGS) $(PROJECT) obj/$(PROJECT).pdf: obj/$(PROJECT).aux $(if $(BIB_FILES), obj/$(PROJECT).bbl) xelatex $(PDFLATEX_FLAGS) $(PROJECT)