BASENAME = demo BUILDDIR = build # environment TEXDIRS = resources/tex:resources/latex-sty:resources/listings:resources/latex TEXDIRS := $(TEXDIRS):resources/images:resources/tables:resources/latex TEXDIRS := $(TEXDIRS):resources/figures BIBDIRS = resources/latex/ BSTDIR = resources/latex-bst/ # cf. latexmkrc LATEXMK = latexmk $(OPTS)$1 VIEWER = xdg-open LATEXMK_COND = @export DEPSFILE=$(notdir $(basename $(TARGET))) && \ $(if $(strip $(TARGET)), \ $(call LATEXMK, $(basename $(TARGET))$1), \ $(call LATEXMK, $(BASENAME)$1) \ && echo '' && echo $(INSTRUCTIONS)) LATEXMK_ERRS = $(if $(strip $1), \ $(call LOG, $(BUILDDIR)/$(basename $1).log), \ $(call LOG, $(BUILDDIR)/$(basename $(BASENAME)).log) \ ) all: build build: setup $(call LATEXMK_COND, ) log: $(call LATEXMK_ERRS, $(TARGET)) view: setup $(call LATEXMK_COND, -pv) preview: setup $(call LATEXMK_COND, -pvc) clean: setup $(call LATEXMK_COND, -c) distclean: setup $(call LATEXMK_COND, -C) help: @echo $(INSTRUCTIONS) %/: mkdir -p $@ setup: .FORCE | $(BUILDDIR)/ ccpri=$(shell echo "\033[0;36m") ccacc=$(shell echo "\033[0;33m") ccend=$(shell echo "\033[0m") dollar=`echo '\$$'` DELIM = $(ccacc)------------\n------------$(ccend) ERRS = error LOG = @echo "$(DELIM)\n" && grep $(ERRS) $1 -A4 -B4 | \ sed --expression='s/--/\n$(DELIM)\n/g' | \ grep --color -E -e '' -e '$(ERRS)' && echo "\n$(DELIM)" INSTRUCTIONS = "$(ccpri)------------------------------------------------------" \ "\n=$(ccend) Help Instructions $(ccpri)=" \ "\n$(ccpri)------------------------------------------------------$(ccend)\n" \ "\n Provided targets:\n\n build, view, preview, log, clean, distclean, help\n" \ "\n Set $(ccpri)$(dollar)TARGET$(ccend) to specify the tex file to" \ "compile \n and $(ccpri)$(dollar)OPTS$(ccend) for additional options" \ "to pass to latexmk.\n" \ "\n Examples:\n" \ "\n $(dollar) make $(ccacc)TARGET$(ccend)=tex/figures/logo $(ccacc)OPTS$(ccend)=-gg"\ "\n $(dollar) make $(ccacc)TARGET$(ccend)=tex/figures/logo clean" \ "\n\n or set permanently\n" \ "\n $(dollar) export $(ccacc)TARGET$(ccend)=tex/chapter.tex" \ "\n $(dollar) make" \ "\n $(dollar) make preview" \ "\n $(dollar) make clean" \ "\n\n or unset $(ccacc)$(dollar)TARGET$(ccend) to turn off this help instruction." .PHONY: all clean distclean .FORCE # export all variables by default .EXPORT_ALL_VARIABLES: TEXINPUTS := :.:$(TEXDIRS) # bibtex invoked from BUILDDIR, thus prepend './../' BSTINPUTS := ./../$(BSTDIR) BIBINPUTS := :.:./../$(BIBDIRS) # disable implicit suffix and built-in rules (for performance and profit) .SUFFIXES: MAKEFLAGS += --no-builtin-rules