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