1

这是使用 pandoc 编译mdpdf. 该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更改了一个文件,它也会构建所有可能的目标( 中的所有内容PDFS)。我想要这个代码的一个版本,它可以监视所有文件的更改,但只为更改md的文件构建一个。(我意识到这对于目前的案例来说毫无意义,但它在另一个更复杂的用例中很有用。)pdf md

4

2 回答 2

1

以下似乎有效:

@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.

于 2016-10-17T00:13:50.977 回答
0

为什么不在命令行上传递要重新创建的目标作为目标目标?

@fswatch -o $^ | xargs -n1 -I{} $(MAKE) '{}'
于 2016-10-16T15:49:35.567 回答