跳过丢失文件的目标

时间:2018-04-19 18:05:11

标签: makefile

我正在尝试创建一个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可能存在。

如何妥善处理此类案件?

2 个答案:

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