Make
在 GNU Make 中的文件列表中應用規則(或 GNU Make 中的“for”指令)
我的 GNU Makefile 中有這個規則:
FITXER = fitxa.md $(FITXER).html: $(FITXER) pandoc --from markdown --to html $(FITXER) -o $(FITXER).html $(FITXER).jpeg: $(FITXER).html wkhtmltoimage $(FITXER).html $(FITXER).jpeg
有沒有辦法在文件列表中應用此規則:例如類似的東西(在虛擬碼中):
for FITXER in [fitxa.md, a.md, b.md, ...] do $(FITXER).html: $(FITXER) pandoc --from markdown --to html $(FITXER) -o $(FITXER).html $(FITXER).jpeg: $(FITXER).html wkhtmltoimage $(FITXER).html $(FITXER).jpeg endfor
解決這個問題的方法是定義一般的建構規則:
%.html: %.md pandoc --from markdown --to html $< -o $@ %.jpg: %.html wkhtmltoimage $< $@
這告訴
make
瞭如何從 Markdown 文件創建 HTML 文件,然後如何從 HTML 文件創建 JPEG。完成此操作後,所需要做的就是告訴您所追求
make
的所有輸出文件:all: fitxa.jpg a.jpg b.jpg .PHONY: all
make all
將弄清楚如何獲取請求的 JPEG 文件。您仍然可以定義其他規則來以不同的方式處理特定的 Markdown 文件:
foo.jpg: foo.md # Process foo.md here to build foo.jpg
這些特定規則優先於通用規則。