我有一个(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
)已过期并相应地触发所有内容。
实现这一目标的最佳方法是什么?
答案 0 :(得分:5)
你绝对想要使用-B
标志。 .phony
在这种情况下不会起作用。你应该试试:
force:
make -B show
这应该使用标志调用show
目标,并使所有内容都适当地重建。
[原始答案]
您要么将该目标声明为.phony
,要么传递标记-B
(我认为它应该是--always-make
的简写)。这应该让(gnu)无视所有的时间戳并做出一切。我自己更喜欢-B
旗帜。