Makefile: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
Zeile 10: Zeile 10:
 
$(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

Version vom 6. Mai 2022, 08:04 Uhr

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 $

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

  1. 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