2017-05-27 20 views
0

我想使用使处理任意目录树(源)的内容并创建与源树具有相同结构的另一个目录树(目标) 。使用make处理从一个任意目录树到另一个目录树的文件

源代码树的子目录包含以.md结尾的文件(降价文本)。目标是使用pandoc为源树中的每个文件在目标树中创建一个.html文件。

以下代码从this thread转换文件在同一棵树,但我不知道如何修改它,因此它将生成的文件放入另一棵树。

markdown := $(shell find . -name '*.md') 

all: $(patsubst %.md, %.pdf, $(markdown)) 

%.pdf: %.md 
    pandoc -o [email protected] $< 

我写了一个脚本,使用bash实现所需的功能,但我想用make来做同样的功能。

UPDATE

在我的使用情况下,所涉及的目录是 当前目录的子目录:

  • 源目录,./docs/,包含几个(嵌套)子目录 包含在.MD

  • 目标目录,./install/HTML/结尾的文件,不存在原,但它 应根据make过程的需要构建。

例如,如果该文件是./docs/info/general/foo.md修改或添加,make过程应之后创建文件./install/HTML/info/general/foo.html创建目录./install/HTML/info/general/如果它不存在。

SOLUTION

后@ MadScientist的文章中,我能够构建以下解决方案:

SOURCE_DIR := docs 
TARGET_DIR := install/HTML 

# ----- Get all source file (.md) paths 
markdown := $(shell find $(SOURCE_DIR) -name '*.md') 

# ----- Strip the source directory and .md suffix 
files := $(patsubst $(SOURCE_DIR)/%.md, %, $(markdown)) 

# ----- Create paths to the target .html files 
html := $(patsubst %, $(TARGET_DIR)/%.html, $(files)) 

all: $(html) 

$(TARGET_DIR)/%.html: $(SOURCE_DIR)/%.md 
    @echo Converting $< into [email protected] 
    dir=`dirname [email protected]`; \ 
    mkdir --parents $$dir; \ 
    pandoc -o [email protected] $< 

回答

0

你不给太多的细节,所以我只能建议是这样的:

DESTDIR := newdir 

markdown := $(shell find . -name '*.md') 

all: $(patsubst %.md, %.pdf, $(markdown)) 

%.pdf: $(DESTDIR)/%.md 
     pandoc -o [email protected] $< 
相关问题