• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Makefile erstellen

Hallo,

ich schreibe ein Makefile, das eine Doxygen-Doku erstellen soll.
Der Code vom Makefile sieht so aus:
Code:
#Entfernen der alten Dokumentation, die im Verzeichnis html liegt
clean:
	rm -rf html

#Erstellen der neuen Dokumentaion
doc: Doxyfile
	doxygen Doxyfile
Nachdem ich make in dem Terminal schreibe, wird

Code:
clean: rm -rf html

ausgeführt, das html-Verzeichnis wird gelöscht, aber das Ausführen von make wird abgebrochen und der nächste Befehl doc wird nicht ausgeführt. Was soll ich ändern, um alle Befehle nacheinander auszuführen?
Bitte schreib mir, wenn ich im falschen Unterforum bin.
 

jg

Newbie
Die einzelnen Punkte (targets) im Makefile (hier clean und doc) werden nicht der Reihe nach ausgeführt. make ohne Parameter bedeutet: such dir das erste target im File. Das ist clean. Das zweite target würde nur dann ausgeführt, wenn das erste davon abhinge.

Ich würde oben drüber noch die 2 Zeilen
rebuild: clean doc

reintun (die 2. Zeile ist leer). Dann führt der Aufruf von make ohne Parameter zum gewünschten Ergebnis, und make clean und make doc funktionieren auch noch.
 

EPhaeton

Newbie
Ist zwar schon ein etwas älteres Thema, aber für diejenigen, die mittels Suchdienst hier landen, finde ich sollte das Makefile etwas standardkonformer dargestellt werden.

Für den "make"-Aufruf ohne Target gibt es das sogenannte "default"-Target. Des Weiteren ist es oft üblich, dass das, was man im Allgemeinen als "rebuild" bezeichnet, einem Target namens "all" zuordnet.
Das Makefile kann auf zwei verschiedene Arten geschrieben werden.

Variante 1: mit Abhängigkeiten
Code:
default: all

all: clean doc
	
doc: Doxyfile
	doxygen Doxyfile
	
clean:
	rm -rf html

Variante 2: mit Rekursion
Code:
default:
	make all

all:
	make clean
	make doc
	
doc: Doxyfile
	doxygen Doxyfile
	
clean:
	rm -rf html

Beide Varianten unterscheiden sich in der Konsolenausgabe und der Art der Aufrufe, erbringen aber das gleiche Ergebnis. Und ist somit Geschmackssache.
 
Oben