2017-05-27 1 views
0

Ich möchte make verwenden, um den Inhalt eines beliebigen Verzeichnisbaums (Quelle) zu verarbeiten und einen anderen Verzeichnisbaum (Ziel) mit derselben Struktur wie der Quellbaum zu erstellen .Verwenden Sie make, um Dateien von einem beliebigen Verzeichnisbaum in einen anderen zu verarbeiten

Die Unterverzeichnisse des Quellbaums enthalten Dateien mit der Endung .md (Markdown-Text). Das Ziel besteht darin, eine HTML-Datei in der Zielstruktur für jede Datei in der Quellstruktur mithilfe von Pandoc zu erstellen.

Der folgende Code von this thread konvertiert Dateien in der gleichen Struktur, aber ich weiß nicht, wie Sie es ändern, so dass es die resultierenden Dateien in einer anderen Struktur ablegt.

Ich schrieb ein Skript, das die gewünschte Funktionalität mit bash implementiert, aber ich möchte das gleiche mit make machen.

UPDATE

In meinem Anwendungsfall beteiligten Verzeichnisse sind Verzeichnisse des aktuellen Verzeichnisses :

  • Das Quellverzeichnis, ./docs/, mehrere (verschachtelte) Verzeichnisse enthält Dateien mit der Endung .md

  • Das Zielverzeichnis, ./install/HTML/, existiert ursprünglich nicht, aber sollte nach Bedarf vom make-Prozess erstellt werden.

Zum Beispiel, wenn die Datei ./docs/info/general/foo.md geändert oder hinzugefügt wird, sollte der make Prozess die Datei ./install/HTML/info/general/foo.html erstellen, nachdem Erstellen des Verzeichnisses ./install/HTML/info/general/, falls es noch nicht existiert.

SOLUTION

Nach @ MadScientist der Post ich in der Lage war, die unten Lösung zu konstruieren:

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] $< 

Antwort

0

Sie geben nicht zu viele Details, so alles, was ich vorschlagen kann, ist dies:

DESTDIR := newdir 

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

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

%.pdf: $(DESTDIR)/%.md 
     pandoc -o [email protected] $< 
Verwandte Themen