Make

在 GNU Make 模式規則中使用萬用字元

  • February 6, 2020

假設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當沒有可用文件時,將呼叫第二個目標。

這些目標的順序很重要。

引用自:https://unix.stackexchange.com/questions/297288