Here's a minimal makefile for using pandoc to compile md to pdf. The make watch command watches for changed md files (using fswatch) and triggers make if so.
SRCS=$(wildcard *.md)
PDFS=$(SRCS:.md=.pdf)
all: $(PDFS)
%.pdf: %.md
@pandoc $< -o $@
watch: $(SRCS)
@fswatch -o $^ | xargs -n1 -I{} make
Currently, watch isn't very selective: even if just one md file is changed, it builds all possible targets (everything in PDFS). I would like a version of this code that watches all the md files for changes, but only builds a pdf for the changed md files. (I realize this is kind of pointless for the present case, but it's useful in another, more complicated use case.)
The following seems to work:
@fswatch -0 $^ | xargs -0 -n1 sh -c 'ALT=`basename "$$1"`; make $${ALT/.md/.pdf}' _
$$1 ends up identified with /path/to/changed_file.md as returned by fswatch. A couple string manipulations give changed_file.pdf, which is fed to make.