fswatch-ing 文件列表,仅生成更改的文件
fswatch-ing a list of files, make-ing only the changed ones
这是使用 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
文件,它也会构建 所有 个可能的目标([=中的所有内容] =19=]).我想要此代码的一个版本,它监视所有 md
文件的更改,但只为 changed md
文件构建一个 pdf
。 (我意识到这对于目前的案例来说有点毫无意义,但它在另一个更复杂的用例中很有用。)
为什么不在命令行中将要重新创建的目标作为目标目标传递?
@fswatch -o $^ | xargs -n1 -I{} $(MAKE) '{}'
以下似乎有效:
@fswatch -0 $^ | xargs -0 -n1 sh -c 'ALT=`basename "$"`; make $${ALT/.md/.pdf}' _
$
最终由 fswatch
返回的 /path/to/changed_file.md
标识。几个字符串操作给出 changed_file.pdf
,它被馈送到 make
.
这是使用 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
文件,它也会构建 所有 个可能的目标([=中的所有内容] =19=]).我想要此代码的一个版本,它监视所有 md
文件的更改,但只为 changed md
文件构建一个 pdf
。 (我意识到这对于目前的案例来说有点毫无意义,但它在另一个更复杂的用例中很有用。)
为什么不在命令行中将要重新创建的目标作为目标目标传递?
@fswatch -o $^ | xargs -n1 -I{} $(MAKE) '{}'
以下似乎有效:
@fswatch -0 $^ | xargs -0 -n1 sh -c 'ALT=`basename "$"`; make $${ALT/.md/.pdf}' _
$
最终由 fswatch
返回的 /path/to/changed_file.md
标识。几个字符串操作给出 changed_file.pdf
,它被馈送到 make
.