我有一个名为的目录markdown
,其中包含.md
文件和其他子目录。我想为每个 md 文件生成一个相应的 html 文件。
该 makefile 可以工作,但是它需要一个单独的构建目录:
SOURCES = $(shell find ./markdown -name "*.md")
HTML = $(patsubst ./markdown/%.md,./build/%.html,$(SOURCES))
all: $(HTML)
build/%.html: markdown/%.md
@echo -e "Convert markdown file [$<] to html [$@]."
我只想在markdown
目录的父级(即项目的根目录)中构建,所以我想要:
./index.html
./foo/bar/hum/another.html
./markdown/index.md
./markdown/foo/bar/hum/another.md
我希望能够删除两个“build/”,因此更改后的行将显示为:
HTML = $(patsubst ./markdown/%.md,./%.html,$(SOURCES))
和
%.html: markdown/%.md
这适用于顶层文件(./markdown/index.md
),但适用于其他任何文件(例如./markdown/foo/bar/hum/another.md
)。为什么会这样?
我相信您的问题与这种模式规则匹配的行为有关:
您可以修改模式规则,使目标包含“/”,或者可以使用静态模式规则: