我正在尝试使用Makefile将某些markdown文件转换为html文件。我正在尝试以几行代码完成以前需要很长的python脚本才能完成的工作。
在下面的简单示例中,我想看这段代码:
build: $(patsubst src/pages/%.md, output/%.html, $(wildcard src/pages/*.md))
%.html: %.md
@echo $< to $@
和此输出
src/pages/index.md to output/index.html
src/pages/about.md to output/about.html
src/pages/contact.md to output/contact.html
src/page/foo/bar.md to output/foo/bar.html
相反,它说:
$ make build
make: *** No rule to make target 'output/index.html', needed by 'build'. Stop.
我在这里缺少一些非常基本的东西。
答案 0 :(得分:0)
考虑目标output/index.html
。依赖...
%.html: %.md
将有效地扩展到...
output/index.html: output/index.md
,其中$*
等于output/index
。因此make
寻找output/index.md
但找不到它-因此出现错误消息。
要获取正确的模式词干($*
== index
),您需要将基本目录添加到模式规则中...
output/%.html: src/pages/%.md
@echo $< to $@
编辑1:
如果您担心重复的硬编码字符串(例如output
和src/pages
),则可以始终将它们分配给参数...
OUTPUT_DIR := output
SOURCE_DIR := src/pages
build: $(patsubst $(SOURCE_DIR)/%.md, $(OUTPUT_DIR)/%.html, $(wildcard $(SOURCE_DIR)/*.md))
$(OUTPUT_DIR)/%.html: $(SOURCE_DIR)/%.md
@echo $< to $@
(假设这就是您的评论中“优化”的意思。)