fswatching一个文件列表,只创建已更改的文件

时间:2016-10-16 15:43:58

标签: makefile fswatch

这里是使用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。 (我意识到这对于本案而言毫无意义,但它在另一个更复杂的用例中很有用。)

2 个答案:

答案 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