尝试编写一个简单的makefile,使用Pandoc将Markdown文件编译为HTML。我不想将所有必备.md
文件显式添加到makefile中,因此我尝试使用模式规则和通配符先决条件:
all: www/*.html
www/%.html: src/%.md
pandoc -f markdown -t html $< > $@
这很接近,但只处理.md
目标文件已存在并且已过期的先决条件.html
文件。已经没有.md
文件的新.html
文件会被忽略(因此,如果构建了所有非新文件,我会make: Nothing to be done for 'all'.
)
我错过的概念是什么?我不确定如何告诉make在.md
中更改的AND src/
文件上运行,并将模式规则应用于每个文件。
答案 0 :(得分:4)
您可以从.html
目录中已有的.md
文件中获取要生成的src/
个文件的列表。
首先,可以使用wildcard
内置函数获取现有.md
文件的列表:
md-files := $(wildcard src/*.md)
然后,将substitution reference应用于md-files
变量,以便删除src/
前缀,并为每个.md
替换后缀.html
.md
文件列表的元素:
$(md-files:src/%.md=%.html)
最后,通过将addprefix
内置函数应用于结果列表,可以将前缀www/
添加到该列表的每个元素中:
html-files := $(addprefix www/,$(md-files:src/%.md=%.html))
将所有内容放在一起,生成的makefile将是:
md-files := $(wildcard src/*.md)
html-files := $(addprefix www/,$(md-files:src/%.md=%.html))
.PHONY: all
all: $(html-files)
www/%.html: src/%.md
pandoc -f markdown -t html $< > $@
答案 1 :(得分:1)
试试这个:
ORDER BY o.Order_ID;