Makefile: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
Mario.zimmermann (Diskussion | Beiträge)
Keine Bearbeitungszusammenfassung
Mario.zimmermann (Diskussion | Beiträge)
 
(9 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
I Hier erzeugt der Befehl aber keine Datei mit Namen clean
I Existiert aber eine Datei mit Namen clean funktioniert make
clean nicht mehr
I Um das das zu beheben m ̈ussen solche unechten Regeln mit
.PHONY gekennzeichnet werden:
.PHONY: clean
Externe Bibliotheken
Einige relevante Compileroptionen
Linkt externe Bibliothek libtest.so -ltest
Sucht nach Headern im Pfad -I/usr/local/include
Sucht nach Bibliotheken im Pfad -L/usr/local/lib
Beispiel dass fftw3 benutzt
example.c
#include <fftw3.h>
int main () {
fftw_complex *in =
fftw_malloc(sizeof(fftw_complex) * 10);
}
Dann kompilieren mit
gcc -c example.c -I/ordner/der/fftw3.h/enth ̈alt/
gcc -o example example.o -lfftw3
-L/ordner/der/libfftw3.so/enth ̈alt

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 $