Makefile - Linker

yxy

Lieutenant
Registriert
Juli 2014
Beiträge
556
Hallo,

ich habe folgende Makefile-Datei gefunden:

AS := as
LINK.o := ld
TARGETS := main

all: $(TARGETS)

main: func1.o func2.o func3.o

clean:
rm -f *.o
rm -f $(TARGETS)

Und zwar verstehe ich daran noch nicht ganz was das TARGETS bezwecken soll. Kennt sich jemand damit aus und könnte mir kurz weiterhelfen? Danke vorab :)
 
Schon laaaange her. Vermute aber, dass damit die Zielarchitektur eingegrenzt wird. Also x86, x86-64, mips, arm, etc. Für den Fall das bestimmte Architekturen andere Anweisungen benötigen.

Edit: Ok scheinbar zu lange her :)
 
Du hast hier mehrere Targets, will heissen Aufgaben, die das Makefile übernehmen soll.
Die Targets haben alle einen Namen gefolgt von Doppelpunkt.
Was oben steht mit ":=" sind Variablen denen Werte zugewiesen werden.

Beispiel:
  • das Target "clean", also: "make clean" führt das aus was bei clean definiert ist.
  • das Target "all" hat den Inhalt der Variable "TARGETS" bekommen, da steht "main" drin, also werden die 3 Dateien func1-func3.o übersetzt.
  • ...
 
Targets in einem Makefile nennt man die Übersetzungsziele. Im Makefile erkennt man sie am Doppelpunkt dahinter. Das Makefile in #1 hat 3 explizit genannte Ziele (all, main, clean). Targets sind also "Make-Sprech", d.h. ein etablierter Begriff beim Umgang mit make. Einfach mal in eine Doku zu make schauen. "man make" ist eine Krücke. Gut sind "info make" und die Online-Doku.

ABER
Im Beispiel des Threaderöffners ist TARGETS nur ein schnöder Variablenname, dem in der 3. Zeile das 'main' zugewiesen wird. Weiter unten wird mehrmals mit $(TARGETS) auf den Inhalt der Varibale TARGETS zugegriffen, also 'main' geliefert.

Wenn du im Makefile überall das Wort TARGETS in DOARGEDDS umbenennst, funktioniert alles wie vorher. Der Name ist wurscht.
 
Zurück
Oben