Makefile-Refel

banshee

Bekanntes Mitglied
Hallo,

in vielen Projekten sehe ich oft makefiles wie dieses hier:

Code:
DIR = bin/

SOURCES = blablup/*.java

final.jar: projname
	jar -cf final.jar -C $(DIR) .

projname:
	javac -d $(DIR) $(SOURCES)

%.class : %.java
	javac -d ($DIR) $<

Wozu braucht man da denn die letzte Regel? Wenn ich aus der Kommandozeile einfach mal manuell javac -d $(DIR) $(SOURCES) ausführe, erzeugt er mir die classfiles wie gewünscht auch ohne diese Regel. Darüber hinaus gibt es ja auch keine Regel, die .class-files als Abhängigkeit haben. Wird sie also überhaupt jemals erreicht?
Oder ist das nur, falls man das makefile explizit mit einem bestimmten class-file aufrufen will?
 

kama

Top Contributor
Hi,

die Angabe "%.class" : %.java" ist eine sog. Pattern Rule die für den Dateinamen verwendet wird...
diese Pattern Rule wirk dann wenn mehrere Dateien da sind und somit wird das javac nur einmal ausgeführt...

soweit ich Make noch zusammen bekommen (ist recht lange her)...

Abgesehen davon halte ich den Einsatz von Make im Zusammenhang mit Java für vollkommen Falsch! Da gibt es besseres...

Weiterhin fällt mir auf, dass das Makefile (so es denn ein GNU-Make File ist) noch ein Problem hat...da projname nicht als PHONY definiert ist...(Ich vermute, dass das nur ein Ausschnit ist?)

Da
Gruß
Karl-Heinz Marbaise
 

HoaX

Top Contributor
Die letzte Regel sagt, dass sobald irgendwo als Dependency irgendwas.class aufgeführt ist, dass dann dieses irgendwas.class von irgendwas.java abhängt und wie folgt erzeugt wird.
 

banshee

Bekanntes Mitglied
die Angabe "%.class" : %.java" ist eine sog. Pattern Rule die für den Dateinamen verwendet wird...
diese Pattern Rule wirk dann wenn mehrere Dateien da sind und somit wird das javac nur einmal ausgeführt...

Also was genau diese rule bedeutet und was sie macht ist mir klar, ich verstehe nur immer noch nicht, wann sie erreicht wird. Außer wenn make mit einem konkreten class-file als Parameter aufgerufen wird (?), wird doch jedesmal final.jar und damit projname ausgeführt, wobei projname nur .java-files als Abhängigkeit hat.

Weiterhin fällt mir auf, dass das Makefile (so es denn ein GNU-Make File ist) noch ein Problem hat...da projname nicht als PHONY definiert ist...(Ich vermute, dass das nur ein Ausschnit ist?)

Nö, hast schon recht, ist auch nicht von mir selbst (dann wäre es nämlich noch schlimmer :D)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Eclipse makefile export Java Basics - Anfänger-Themen 13

Ähnliche Java Themen


Oben