必须在makefile中写一个"强制"目标

hal*_*leo 0 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 $<
Run Code Online (Sandbox Code Playgroud)

这可以按预期工作:通过首先调用md - > tex规则,然后是tex - > pdf,最后是showpdf规则,在markdown文件发生变化时,make showmain.md(或我指定的任何其他markdown文件)创建并显示PDF .

现在我想添加一个force触发规则的目标md - > tex, tex - > pdfshowpdf,无论状态如何main.md.

这个答案我试着

force:
    rm $(INP).pdf
    make show
Run Code Online (Sandbox Code Playgroud)

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

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

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

The*_*PhD 5

你绝对想要使用-B旗帜..phony在这种情况下不会很有效.你应该试试:

force: make -B show

这应该show使用标志调用目标并使一切都适当地重建.

[原始答案]

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