Makefile来处理文件夹的内容

Makefile来处理文件夹的内容,makefile,Makefile,我有一个文件夹,其中包含一些我想使用pandoc处理的标记文件,并将它们输出到Jekyll站点的另一个文件夹中。我正在尝试使用以下生成文件: MARKDOWN = $(wildcard *.md) jekyll-build : _posts/$(MARKDOWN) bundle exec jekyll build _posts/%.md : source/%.md pandoc -s -t markdown-citations -o $@ $< 但是,

我有一个文件夹,其中包含一些我想使用pandoc处理的标记文件,并将它们输出到Jekyll站点的另一个文件夹中。我正在尝试使用以下生成文件:

MARKDOWN = $(wildcard *.md)

jekyll-build : _posts/$(MARKDOWN)
        bundle exec jekyll build

_posts/%.md : source/%.md
        pandoc -s -t markdown-citations -o $@ $<

但是,make没有查找_posts文件夹的内容,而是查找当前工作目录中的任何*.md文件,其中我有一个index.md文件,然后抱怨找不到_posts/index.md。据我所知,这是模式规则的预期行为,因此我的问题是:如何让make查找源文件夹中的所有现有文件,并在其中每个文件上运行配方?

谢谢@Beta。是否有文件证明不允许将路径和变量连接在一起(就像我对path/to/$variable所做的那样)?这是绝对允许的。它只是做不到你想要的。您似乎在想象将字符串前置到变量将导致make遍历该变量中的所有单个单词,并将字符串前置到每个单词。。。事实并非如此。如果变量FOO的值为FOO bar biz,那么pre/$FOO将扩展为pre/FOO bar biz。它不会扩展到pre/foo-pre/bar-pre/biz。Make的工作方式与几乎所有支持变量插值的编程语言的工作方式相同:直接文本替换,
MARKDOWN = $(wildcard source/*.md)

POSTS := $(patsubst source/%,_posts/%, $(MARKDOWN))

jekyll-build : $(POSTS)                                                                                  
    ...

_posts/%.md : source/%.md                                                                                
    ...