Makefile: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(7 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
=Automatische Variablen=
+
=Makefiles=
 +
*Dateinamen für Makefile sind
 +
**makefile
 +
**Makefile
 +
**GNUmakefile
 +
*make -j N erlaubt N Jobs gleichzeitig
 +
 
 +
==Variablen==
 +
*Man kann Variablen in Makefiles definieren:
 +
<syntaxhighlight lang="makefile">
 +
CC = gcc
 +
CC_OPTS = -O2 -Wall -Wextra -std=c11
 +
HEADERS = header1.h header2.h
 +
</syntaxhighlight>
 +
 
 +
*Und dann benutzen:
 +
<syntaxhighlight lang="makefile">
 +
main.o: main.c $(HEADERS)
 +
$(CC) $(CC_OPTS) -c main.c
 +
</syntaxhighlight>
 +
 
 +
==Automatische Variablen==
 
*$@ Name das Ziels
 
*$@ Name das Ziels
 
*$^ Name aller Voraussetzungen, getrennt durch Leerzeichen
 
*$^ Name aller Voraussetzungen, getrennt durch Leerzeichen
 
*$< ist die erste Voraussetzung
 
*$< ist die erste Voraussetzung
 +
 +
===Beispiele===
 
<syntaxhighlight lang="makefile">
 
<syntaxhighlight lang="makefile">
Beispiele:
 
 
hello: main.o helper.o
 
hello: main.o helper.o
 
$(CC) $(CC_OPTS) $^ -o $@
 
$(CC) $(CC_OPTS) $^ -o $@
Zeile 10: Zeile 32:
 
$(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
 

Aktuelle Version vom 6. Mai 2022, 08:13 Uhr

Makefiles

  • Dateinamen für Makefile sind
    • makefile
    • Makefile
    • GNUmakefile
  • make -j N erlaubt N Jobs gleichzeitig

Variablen

  • Man kann Variablen in Makefiles definieren:
CC = gcc
CC_OPTS = -O2 -Wall -Wextra -std=c11
HEADERS = header1.h header2.h
  • Und dann benutzen:
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 $