Makefile: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
=Variablen=
I Man kann Variablen in Makefiles definieren:
<syntaxhighlight lang="makefile">
CC = gcc
CC_OPTS = -O2 -Wall -Wextra -std=c11
HEADERS = header1.h header2.h
I Und dann benutzen:
<syntaxhighlight lang="makefile">
main.o: main.c $(HEADERS)
$(CC) $(CC_OPTS) -c main.c
</syntaxhighlight>
=Automatische Variablen=
=Automatische Variablen=
*$@ Name das Ziels
*$@ Name das Ziels
Zeile 10: Zeile 23:
$(CC) $(CC_OPTS) -c $
$(CC) $(CC_OPTS) -c $
</syntaxhighlight>
</syntaxhighlight>
=Phony Targets=
I Manchmal will man make nur benutzen um ein paar Befehle
auszuführen, hier löscht make clean die auszuführbare Datei
und alle Objektdateien:
clean:
*rm -f hello
*rm -f *.o
Hier erzeugt der Befehl aber keine Datei mit Namen clean
Existiert aber eine Datei mit Namen clean funktioniert make
clean nicht mehr
I Um das das zu beheben müssen solche unechten Regeln mit
.PHONY gekennzeichnet werden:
.PHONY: clean

Version vom 6. Mai 2022, 10:06 Uhr

Variablen

I Man kann Variablen in Makefiles definieren:

CC = gcc
CC_OPTS = -O2 -Wall -Wextra -std=c11
HEADERS = header1.h header2.h

I Und dann benutzen:
<syntaxhighlight lang="makefile">
main.o: main.c $(HEADERS)
$(CC) $(CC_OPTS) -c main.c

Automatische Variablen

  • $@ Name das Ziels
  • $^ Name aller Voraussetzungen, getrennt durch Leerzeichen
  • $< ist die erste Voraussetzung
Beispiele:
hello: main.o helper.o
$(CC) $(CC_OPTS) $^ -o $@
main.o: main.c $(HEADERS)
$(CC) $(CC_OPTS) -c $