我正在尝试创建一个Makefile,如果输入文件丢失,它会跳过目标。目前我正在使用以下代码:
default: foo \
bar
foo: foo.pdf
bar: bar.pdf
%.pdf: %.tex
@if [ -s $< ]; then \
pdflatex -interaction=batchmode $<; \
else \
echo 'Skipped' $<; \
fi;
只要文件foo.tex
存在,它就会起作用,但如果缺少则会失败:
制作:***没有规则来制作目标&f ;. ff。&#39;,foo&#39;需要。停止。
而不是停止我希望该过程继续bar.tex
可能存在。
如何妥善处理此类案件?
答案 0 :(得分:2)
假设使用make -k
的基本思想是可以接受的,那么在不必明确指定-k
标志的情况下调用它的最简单方法可能是简单地使用makefile
来引导自己添加该选项。
ifneq ($(origin bootstrapped),undefined)
default: foo \
bar
foo: foo.pdf
bar: bar.pdf
%.pdf: %.tex
@if [ -s $< ]; then \
pdflatex -interaction=batchmode $<; \
else \
echo 'Skipped' $<; \
fi;
else
# If the variable `boostrapped' is undefined then we simply run
# the same make invocation but with added -k and bootstrapped=1
default:
$(MAKE) bootstrapped=1 $(MAKEFLAGS) -k -f $(lastword $(MAKEFILE_LIST))
endif
便宜又开朗 - 但它应该有用。
答案 1 :(得分:2)
%.pdf: %.tex
pdflatex -interaction=batchmode $<
%.pdf:
@echo Skipped $@