Sind diese Leerzeichen oder eine Registerkarte vor dem pandocBefehl. Make ist notorisch wählerisch, wenn es sich um Tabulatoren und keine Leerzeichen handelt.
slm
@slm: Es ist eine Registerkarte. Ich habe irgendwo gelesen, dass Windows EOL nicht kompatibel ist, also habe ich in eine ganze Datei zu Unix-kompatiblem EOL konvertiert.
Ahmed
Antworten:
17
Problem:
Ihr Problem ist, dass Sie makenichts über Ihre Ziele wissen.
Sie können Ihr obiges Makefile make stackoverflow.markdownzum Beispiel mit ausführen und es wird funktionieren.
make Nur dies schlägt jedoch fehl, da Sie nur angegeben haben, wie Ihre Ziele erstellt werden sollen, nicht jedoch welche.
SRCHolen Sie sich alle Quelldateien (die mit enden .html) über Makefile's wildcard.
TAR ersetzt jede aufgelistete Quelldatei SRCdurch ein Ziel, das mit .markdownstatt endet .html.
.PHONY listet nicht-physische Ziele auf, die immer veraltet sind und daher immer ausgeführt werden - dies sind häufig allund clean.
Das Zielall hat als Abhängigkeit (Dateien auf der rechten Seite der Liste :) alle *.markdownDateien. Dies bedeutet, dass alle diese Ziele ausgeführt werden.
%.markdown: %.html
pandoc -o $< $@
In diesem Snippet heißt es: Jedes Ziel, das mit endet, .markdownhängt von einer Datei mit demselben Namen ab, mit der Ausnahme, dass die Abhängigkeit mit endet .html. Der Platzhalter% ist als *Like in Shell zu sehen. Das %auf der rechten Seite wird jedoch mit dem Spiel auf der linken Seite verglichen. Quelle .
Beachten Sie, dass die Leerzeichenfolge vor a pandocist TAB, da dies makeals Standard definiert wird.
Schließlich zeigt das falsche cleanZiel, wie Sie Ihr System von den Dateien reinigen, die Sie mit diesem Makefile erstellt haben. In diesem Fall werden alle Ziele gelöscht (die benannten Dateien) *.markdown.
Noch eine Frage: makefileKönnen Sie Dateien von Grund auf neu erstellen oder aktualisieren Sie nur vorhandene Dateien? Denn wenn ich die generierten Dateien lösche, funktioniert es nicht mehr. Dumme Frage, die ich kenne, aber das ist Neufundland für mich ^^ "
ahmed
1
Sie meinen, wenn es keine .markdown-Dateien gibt, werden sie erstellt? Ja, das sollte es tun, soweit ich weiß
Polym
1
Alles klar dann. Ich werde noch etwas graben. Vielen Dank für Ihre Antworten, dank Ihnen bin ich jetzt auf dem richtigen Weg
:)
1
Ich wollte mich nur für die tolle Antwort bedanken. Die Art und Weise, wie Sie erklärt haben, ist sehr leicht zu verstehen, warum der Befehl nicht funktioniert hat, und es gibt sehr detaillierte Anweisungen zum weiteren Vorgehen. Danke noch einmal.
In Ihrem Makefile sind keine Ziele definiert. Sie können das Ziel in der Befehlszeile angeben: make something.markdownverwendet das Rezept zum Erstellen something.markdownaus something.html.
Oder Sie können Ihrem Makefile eine Regel hinzufügen, die Standardziele angibt.
Das Ziel allhat also oben alle Dateien, die Sie als Voraussetzungen erstellen möchten. Wenn Sie make alldies tun , werden alle aufgelisteten Dateien erstellt.
pandoc
Befehl. Make ist notorisch wählerisch, wenn es sich um Tabulatoren und keine Leerzeichen handelt.Antworten:
Problem:
Ihr Problem ist, dass Sie
make
nichts über Ihre Ziele wissen.Sie können Ihr obiges Makefile
make stackoverflow.markdown
zum Beispiel mit ausführen und es wird funktionieren.make
Nur dies schlägt jedoch fehl, da Sie nur angegeben haben, wie Ihre Ziele erstellt werden sollen, nicht jedoch welche.Wie Leiaz hervorhebt, wird die obige Musterregel als implizite Regel bezeichnet .
Makefile:
Erläuterung:
SRC
Holen Sie sich alle Quelldateien (die mit enden.html
) über Makefile'swildcard
.TAR ersetzt jede aufgelistete Quelldatei
SRC
durch ein Ziel, das mit.markdown
statt endet.html
..PHONY listet nicht-physische Ziele auf, die immer veraltet sind und daher immer ausgeführt werden - dies sind häufig
all
undclean
.Das Ziel
all
hat als Abhängigkeit (Dateien auf der rechten Seite der Liste:
) alle*.markdown
Dateien. Dies bedeutet, dass alle diese Ziele ausgeführt werden.In diesem Snippet heißt es: Jedes Ziel, das mit endet,
.markdown
hängt von einer Datei mit demselben Namen ab, mit der Ausnahme, dass die Abhängigkeit mit endet.html
. Der Platzhalter%
ist als*
Like in Shell zu sehen. Das%
auf der rechten Seite wird jedoch mit dem Spiel auf der linken Seite verglichen. Quelle .Beachten Sie, dass die Leerzeichenfolge vor a
pandoc
ist TAB, da diesmake
als Standard definiert wird.Schließlich zeigt das falsche
clean
Ziel, wie Sie Ihr System von den Dateien reinigen, die Sie mit diesem Makefile erstellt haben. In diesem Fall werden alle Ziele gelöscht (die benannten Dateien)*.markdown
.quelle
makefile
Können Sie Dateien von Grund auf neu erstellen oder aktualisieren Sie nur vorhandene Dateien? Denn wenn ich die generierten Dateien lösche, funktioniert es nicht mehr. Dumme Frage, die ich kenne, aber das ist Neufundland für mich ^^ "Musterregeln sind implizite Regeln.
In Ihrem Makefile sind keine Ziele definiert. Sie können das Ziel in der Befehlszeile angeben:
make something.markdown
verwendet das Rezept zum Erstellensomething.markdown
aussomething.html
.Oder Sie können Ihrem Makefile eine Regel hinzufügen, die Standardziele angibt.
Oder mit einem Platzhalter:
Wenn Sie nur ausführen
make
, ist das erste Ziel der ersten Regel das Standardziel . Es muss nicht aufgerufen werdenall
.Das Ziel
all
hat also oben alle Dateien, die Sie als Voraussetzungen erstellen möchten. Wenn Siemake all
dies tun , werden alle aufgelisteten Dateien erstellt.quelle