必须写一个" force" makefile中的目标

时间:2015-08-30 02:48:18

标签: makefile gnu-make

我有一个(GNU)make文件,包含两个级别的依赖项:

INP ?= main
DEPS ?= bibliography.bib
# md-->tex rule
%.tex: %.md $(DEPS)
    panzer  -o $@ $<

# tex-->pdf rule
%.pdf: %.tex
    latexmk $<

.PHONY: show 
show: $(INP).pdf
    showpdf $<

这可以按预期工作:make show通过首先调用markdown文件来更改,从main.md(或我指定的任何其他markdown文件)创建并显示PDF md - &gt; tex 规则,然后是 tex - &gt; pdf ,最后是 showpdf 规则。

现在我想添加一个目标force,触发规则 md - &gt; tex tex - &gt; pdf showpdf ,无论main.md的状态如何。

this answer我试过

force:
    rm $(INP).pdf
    make show

但这不是很优雅而且相当脆弱。 - 我怀疑必须有一种方法可以在当前的make调用中创建一个目标来说:

  

假设规则X的依赖关系(此处show)已过期并相应地触发所有内容。

实现这一目标的最佳方法是什么?

1 个答案:

答案 0 :(得分:5)

你绝对想要使用-B标志。 .phony在这种情况下不会起作用。你应该试试:

force: make -B show

这应该使用标志调用show目标,并使所有内容都适当地重建。

[原始答案]

您要么将该目标声明为.phony,要么传递标记-B(我认为它应该是--always-make的简写)。这应该让(gnu)无视所有的时间戳并做出一切。我自己更喜欢-B旗帜。