这里是使用pandoc将md
编译为pdf
的最小makefile。 make watch
命令会监视已更改的md
文件(使用fswatch
),如果是,则会触发make
。
SRCS=$(wildcard *.md)
PDFS=$(SRCS:.md=.pdf)
all: $(PDFS)
%.pdf: %.md
@pandoc $< -o $@
watch: $(SRCS)
@fswatch -o $^ | xargs -n1 -I{} make
目前,watch
并非具有选择性:即使只更改了一个md
文件,它也会构建所有可能的目标({{1}中的所有内容})。我希望此代码的一个版本能够监视所有PDFS
个文件以进行更改,但只为{em>已更改的 md
文件构建pdf
。 (我意识到这对于本案而言毫无意义,但它在另一个更复杂的用例中很有用。)
答案 0 :(得分:0)
为什么不在命令行上传递要重新创建目标的目标?
@fswatch -o $^ | xargs -n1 -I{} $(MAKE) '{}'
答案 1 :(得分:0)
以下似乎有效:
@fswatch -0 $^ | xargs -0 -n1 sh -c 'ALT=`basename "$$1"`; make $${ALT/.md/.pdf}' _
$$1
最终标识为/path/to/changed_file.md
,由fswatch
返回。一对字符串操作会将changed_file.pdf
提供给make
。