From 0ccff951e58fdf1a71b474eb5ecbe2d1c2030fce Mon Sep 17 00:00:00 2001 From: Egor Tensin Date: Wed, 7 Apr 2021 03:16:04 +0300 Subject: Makefile: best practices --- Makefile | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/Makefile b/Makefile index 8fa8373..d6ec2d1 100644 --- a/Makefile +++ b/Makefile @@ -1,32 +1,47 @@ MAKEFLAGS += --no-builtin-rules --no-builtin-variables --warn-undefined-variables +unexport MAKEFLAGS .DEFAULT_GOAL := all .DELETE_ON_ERROR: .SUFFIXES: SHELL := bash .SHELLFLAGS := -eu -o pipefail -c +.PHONY: DO +DO: + +escape = $(subst ','\'',$(1)) + +define noexpand +ifeq ($$(origin $(1)),environment) + $(1) := $$(value $(1)) +endif +ifeq ($$(origin $(1)),environment override) + $(1) := $$(value $(1)) +endif +ifeq ($$(origin $(1)),command line) + override $(1) := $$(value $(1)) +endif +endef + MKDIR := mkdir -p -- -RMDIR := $(RM) -r -- +RMDIR := rm -r -- name := cv pdf := $(name)/$(name).pdf -.PHONY: DO -DO: - .PHONY: all all: $(pdf) $(pdf): $(name).tex img/selfie_face.jpg | $(name)/ - pdflatex -interaction=nonstopmode -halt-on-error -output-directory=$(name)/ $< + pdflatex -interaction=nonstopmode -halt-on-error '-output-directory=$(call escape,$(name))/' '$(call escape,$<)' %/: - $(MKDIR) $@ + $(MKDIR) '$(call escape,$@)' .PHONY: clean clean: - find $(name) '!' -name cv.pdf -type f -delete + find '$(call escape,$(name))' '!' -name cv.pdf -type f -delete .PHONY: clean-all clean-all: - $(RMDIR) $(name)/ + $(RMDIR) '$(call escape,$(name))/' -- cgit v1.2.3