Make
在 GNU Make 模式規則中使用萬用字元
假設
doc.pdf
是目標。以下規則觸發
doc.pdf
每當更新時的重新生成,但在根本不存在doc.refer
時也很高興:doc.refer
doc.pdf: doc.mom $(wildcard doc.refer) pdfmom -e -k < $< > $@
但是,以下模式規則不能完成相同的操作(正確生成 PDF,但更改時不會觸發重建
doc.refer
):%.pdf: %.mom Makefile $(wildcard %.refer) pdfmom -e -k < $< > $@
我懷疑該
wildcard
命令是在%
字元展開之前執行的。我該如何解決這個問題?
GNU Make 函式
wildcard
採用 shell globbing 模式並將其擴展為與該模式匹配的文件。該模式%.refer
不包含任何外殼通配模式。你可能想要類似的東西
%.pdf: %.mom %.refer pdfmom -e -k < $< > $@ %.pdf: %.mom pdfmom -e -k < $< > $@
當有一個
.mom
和一個.refer
文件可用於文件的基本名稱時,將呼叫第一個目標來製作 PDF 文件。.refer
當沒有可用文件時,將呼叫第二個目標。這些目標的順序很重要。