2016-07-27 26 views
2

Ich benutze bash und versuche, ein Makefile zu verwenden, um alle Dateien in einem Verzeichnis mit .ppt nach .pdf zu kopieren und sie dann alle in ein Archiv einzufügen. Dies ist, was ich bisherWie man alle Dateierweiterungen mit einem Makefile ändert

.PHONY: all clean 

files = $(wildcard *.ppt) 

OBJ = $(patsubst %.pdf, %.ppt, $(wildcard *.ppt)) 

clean: 
     rm -f lectures.tar.gz *.pdf 

Das einzige Makefiles Ich habe zu diesem Punkt aus sind verwendet worden, ein Programm von 1 oder 2 Quelldateien zu kompilieren. Nicht sicher, wie man das angehen kann

+0

Oh ja, und 'warum 'willst du es so machen? Warum nicht ein traditionelles Shell-Skript? Viel Glück. – shellter

+0

@shellter Ich habe bereits ein Shell-Skript gemacht, das funktioniert. Dies ist für Hausaufgaben. Ich muss ein Shell-Skript und ein Makefile erstellen, die beide genau dasselbe tun und ich weiß nicht, was ich mit dem Makefile machen soll –

Antwort

3

Der Trick mit make ist, dass es an der Ende beginnt, mit dem, was Sie erstellen möchten, und dann rückwärts zum Anfang geht, um zu sehen, was sich geändert hat.

Also, was ist am Ende: Was möchten Sie produzieren? Anhand Ihres Beispiels werden wir daraus schließen, dass Sie eine komprimierte TAR-Datei mit dem Namen lectures.tar.gz erstellen möchten. Also, wir brauchen ein Ziel dafür:

lectures.tar.gz: 

Was geht in die TAR-Datei? die PDF-Dateien, die Sie bereits entdeckt haben, wie in den OBJ Variable zu berechnen, so dass diese Dinge müssen als Voraussetzungen von lectures.tar.gz aufgeführt:

lectures.tar.gz: $(OBJ) 

Was ist das Rezept für dieses Ziel? Es sollte eine TAR-Datei mit diesem Namen erstellt werden, die alle Dateien enthält. Eine Möglichkeit, dies ist:

lectures.tar.gz: $(OBJ) 
     tar czf lectures.tar.gz $(OBJ) 

Ein anderer Weg, allgemeinere automatic variables verwenden, wäre:

lectures.tar.gz: $(OBJ) 
     tar czf [email protected] $^ 

Nun, wie schaffen Sie die OBJ Dateien? Für jedes müssen Sie es aus der .ppt Version kopieren. Da Sie GNU make benutzen (wie durch Ihre Verwendung von wildcard etc. Funktionen belegt), können Sie dafür einen pattern rule verwenden; das ist das Muster:

%.pdf : %.ppt 
     cp $< [email protected] 

Dieses Muster zeigt machen, wie eine Datei erstellen X.pdf aus einer beliebigen Datei X.ppt mit einem cp Befehl ein: in diesem Fall sind die automatischen Variablen $< und [email protected] erforderlich sind, da Sie nicht wissen, die Namen. Dies ist eine implizite Regel, weil die Namen nicht explizit aufgeführt sind, aber durch das Muster impliziert.

Jetzt wie erstellen Sie die .ppt Dateien? Sie nicht, weil sie Quelldateien sind, also sind Sie fertig!