我有一个(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 $<
Run Code Online (Sandbox Code Playgroud)
这可以按预期工作:通过首先调用md - > tex规则,然后是tex - > pdf,最后是showpdf规则,在markdown文件发生变化时,make show从main.md(或我指定的任何其他markdown文件)创建并显示PDF .
现在我想添加一个force触发规则的目标md - > tex, tex - > pdf和showpdf,无论状态如何main.md.
从这个答案我试着
force:
rm $(INP).pdf
make show
Run Code Online (Sandbox Code Playgroud)
但这不是很优雅而且相当脆弱. - 我怀疑必须有一种方法可以在当前的make调用中创建一个目标来说:
假设规则X(此处
show)的依赖关系已过期并相应地触发所有内容.
实现这一目标的最佳方法是什么?
你绝对想要使用-B旗帜..phony在这种情况下不会很有效.你应该试试:
force:
make -B show
这应该show使用标志调用目标并使一切都适当地重建.
[原始答案]
您要么声明目标.phony,要么传递标志-B(我认为应该是简写--always-make).这应该让(gnu)无视所有的时间戳并做出一切.我-B自己更喜欢这面旗帜.