GNU Make: Unterschied zwischen den Versionen
Amo (Diskussion | Beiträge) |
Dimas (Diskussion | Beiträge) K |
||
(Eine dazwischenliegende Version von einem anderen Benutzer wird nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
GNU Make ist ein Werkzeug, dass das Erzeugen ausführbarer Dateien aus |
GNU Make ist ein Werkzeug, dass das Erzeugen ausführbarer Dateien aus |
||
deren Sourcen und anderen Bestandteilen steuert. Die Informationen die |
deren Sourcen und anderen Bestandteilen steuert. Die Informationen die |
||
dazu notwendig sind bezieht |
dazu notwendig sind bezieht Make dabei aus einem Makefile. Durch die |
||
Verwendung von Make ist das Kompilieren von Programmen angenehmer. |
Verwendung von Make ist das Kompilieren von Programmen angenehmer. |
||
Wie Make funktioniert und wie man Makefiles schreibt ist auf der Homepage des |
Wie Make funktioniert und wie man Makefiles schreibt ist auf der Homepage des |
||
Zeile 22: | Zeile 22: | ||
Hier verwendete Variablen:<br> |
Hier verwendete Variablen:<br> |
||
* CC: Compiler der verwendet werden soll |
* CC: Compiler, der verwendet werden soll |
||
* CFLAGS: Optionen mit denen der Compiler aufgerufen wird |
* CFLAGS: Optionen mit denen der Compiler aufgerufen wird |
||
** -g: Erzeugt Debugginginformation |
** -g: Erzeugt Debugginginformation |
||
** -Wall: Schaltet alle optionalen Warnungen ein |
** -Wall: Schaltet alle optionalen Warnungen ein |
||
* LDFLAGS: Optionen mit denen der Linker aufgerufen wird |
* LDFLAGS: Optionen, mit denen der Linker aufgerufen wird |
||
** -lm: Linkt auf Funktionen aus <math.h> |
** -lm: Linkt auf Funktionen aus <math.h> |
||
** -lgsl: Linkt auf Funktionen aus der libgsl ([[GNU Scientific Library]]) |
** -lgsl: Linkt auf Funktionen aus der libgsl ([[GNU Scientific Library]]) |
||
** -lgslcblas: Auch dieser flag ist bei der Verwendung der libgsl nötig |
** -lgslcblas: Auch dieser flag ist bei der Verwendung der libgsl nötig |
||
* VPATH: Angabe von Verzeichnissen (getrennt durch : ) die nach |
* VPATH: Angabe von Verzeichnissen (getrennt durch : ) die nach Sourcecoden durchsucht werden sollen |
||
Funktionsweise: |
Funktionsweise: |
||
Zeile 37: | Zeile 37: | ||
erzeugt die Dateien prog1.o und functions.o und fügt sie anschließend |
erzeugt die Dateien prog1.o und functions.o und fügt sie anschließend |
||
zu einer ausführbaren Datei zusammen. In diesem Beispiel werden dazu |
zu einer ausführbaren Datei zusammen. In diesem Beispiel werden dazu |
||
[http://www.gnu.org/software/make/manual/ |
[http://www.gnu.org/software/make/manual/html_node/Implicit-Rules.html#Implicit-Rules implizite Regeln] |
||
verwendet.<br> |
verwendet.<br> |
||
$ make all |
$ make all |
Aktuelle Version vom 26. Juli 2010, 08:28 Uhr
GNU Make ist ein Werkzeug, dass das Erzeugen ausführbarer Dateien aus deren Sourcen und anderen Bestandteilen steuert. Die Informationen die dazu notwendig sind bezieht Make dabei aus einem Makefile. Durch die Verwendung von Make ist das Kompilieren von Programmen angenehmer. Wie Make funktioniert und wie man Makefiles schreibt ist auf der Homepage des GNU Projektes zu finden.
Beispiele
CC = gcc CFLAGS = -g -Wall LDFLAGS = -lm -lgsl -lgslcblas VPATH = ../include all: prog1 prog2 prog1: prog1.o functions.o prog2: prog2.o functions.o clean: rm *.o *.dat
Hier verwendete Variablen:
- CC: Compiler, der verwendet werden soll
- CFLAGS: Optionen mit denen der Compiler aufgerufen wird
- -g: Erzeugt Debugginginformation
- -Wall: Schaltet alle optionalen Warnungen ein
- LDFLAGS: Optionen, mit denen der Linker aufgerufen wird
- -lm: Linkt auf Funktionen aus <math.h>
- -lgsl: Linkt auf Funktionen aus der libgsl (GNU Scientific Library)
- -lgslcblas: Auch dieser flag ist bei der Verwendung der libgsl nötig
- VPATH: Angabe von Verzeichnissen (getrennt durch : ) die nach Sourcecoden durchsucht werden sollen
Funktionsweise: Ein Aufruf von
$ make prog1
erzeugt die Dateien prog1.o und functions.o und fügt sie anschließend
zu einer ausführbaren Datei zusammen. In diesem Beispiel werden dazu
implizite Regeln
verwendet.
$ make all
baut die Programme prog1 und prog2 ebenfalls unter der Verwendung von impliziten Regeln. Ein Aufruf von
$ make clean
löscht alle Dateien die mit .o oder .dat enden. Hier ist der auszuführende Befehl explizit angegeben.