![](/img/trans.png)
[英]How to write Makefile where target and source files have the same extension?
[英]Have to write a “force” target in a makefile
我有一個具有兩層依賴關系的(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 $<
這可以按預期工作: 當markdown文件發生更改時 ,首先調用main.md
> tex規則,然后依次調用main.md
> pdf和make show
從main.md
(或我指定的任何其他markdown文件)創建並顯示PDF。最后是showpdf規則。
現在,我想添加一個目標force
,無論main.md的狀態如何,它都會觸發規則md- > tex , tex- > pdf和main.md
。
從這個答案我嘗試了
force:
rm $(INP).pdf
make show
但這不是很優雅,而且很脆弱。 -我懷疑必須有一種方法可以在當前的make調用中創建一個目標:
假裝規則X(此處為
show
)的依賴關系已過時,並相應地觸發所有操作。
什么是實現這一目標的最佳方法?
您絕對希望只使用-B
標志。 .phony
在這種情況下將無法正常工作。 你應該試試:
force: make -B show
那應該調用帶有標志的show
target並使所有東西適當地重建自身。
[原始答案]
您可以將目標聲明為.phony
,也可以傳遞標志-B
(我認為應該是--always-make
簡寫--always-make
)。 這應該使(gnu)忽略所有時間戳,並制作所有內容。 我更喜歡-B
標志。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.