Sometimes you may have a filename that contains quotes & your usual makefile routines breaks. For example, if you generate
index.Ukrayins'ka.html from index.Ukrayins'ka.md
& add index.Ukrayins'ka.html to clean variable, this classic pattern won't work anymore:
.PHONY: clean clean: rm -rf $(clean)
because your shell will complain about a quote mismatch.
So you need to 'shellquote' a variable clean.
We can write a parameterized function in make that transforms 1 word into a safe shell-quoted string:
clean.shellquote = '$(subst ','\'',$(1))'
The Make manual has a nice example of a map function. That's all we need: we transform each word from clean variable w/ the map function that calls our clean.shellquote routine.
The complete example:
clean.map = $(foreach a,$(2),$(call $(1),$(a))) clean.shellquote = '$(subst ','\'',$(1))' # '# emacs font-lock .PHONY: clean clean: rm -rf $(call clean.map,clean.shellquote,$(clean))