在 GNU Make 中的文件列表中应用规则(或 GNU Make 中的“for”指令)

在 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

答案1

解决这个问题的方法是定义一般构建规则:

%.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

这些特定规则优先于通用规则。

相关内容