Einfaches Makefile

Harald Weidner hweidner-lists at gmx.net
Do Jul 1 12:15:44 BST 2010


Hallo,

Detlef.Lechner at gmx.net:

>Ein einfaches Makefile
>ist /usr/src/linux-source-2.6.32/drivers/net/wireless/ath/ath5k/Makefile.
>Wer könnte mir bitte die Funktion dieser speziellen Datei in 2 Sätzen
>beschreiben?

In diesem Makefile werden Abhängigkeiten definiert. Beispiel: die Zeile

  ath5k-y    += caps.o

besagt: dem Target ath5k-y wird das Target caps.o zu seinen Abhängigkeiten
hinzugefügt (+=). Das bedeutet, wenn irgendwo im Laufe des Make-Laufes
das Target ath5k-y erzeugt werden soll, dann wird zur Erfüllung das Target
caps.o erzeugt.

Eine explizite Regel mit caps.o auf der linken Seite gibt es vermutlich
nirgends. Aber GNU Make hat eingebaute Regeln, zu denen u.a. gehört, dass
caps.o aus caps.c gebaut werden kann. Und caps.c befindet sich als Datei
in diesem Verzeichnis.

Es ist aber nicht sinnvoll, in diesem Verzeichnis direkt "make" aufzurufen.
Hier sind viele Variablen nicht gesetzt, die für den Bau des Treibers
benötigt werden; insbesondere fehlt der Include-Path, so dass die ganzen
Header-Dateien des Kernels nicht gefunden werden.

Make ist ein Top-Down Prozess. Das Makefile im obersten Verzeichnis bindet
die Makefiles der Unterverzeichnisse ein, um daraus das Gesamtwerk zu
erzeugen.

> Was sollen da die Zeichen "-y"?

Das ist eine Konvention des Linux Kernel Makefile-Systems. ath5k-y ist ein
internes Target, dass die Abhängigkeiten definiert, wenn der Treiber ath5k
fest in den Kernel eincompiliert werden soll. Analog dazu ist ath5k-m das
Target für den Bau des Treibers als Modul. Die Variable CONFIG_ATH5K wird
aus /usr/src/linux-.../.config ausgelesen und steht auf y, m oder ist nicht
gesetzt; je nachdem, ob und und wie der Treiber gebaut werden soll.

Siehe dazu diesen Artikel: http://lwn.net/Articles/21835/
Er ist zwar schon etwas älter, aber das meisste davon gilt auch für
aktuelle Kernelversionen.

>Das Lesen von
>http://www.gnu.org/software/make/manual/make.html#Rule-Introduction ,
>http://de.wikipedia.org/wiki/Makefile ,
>http://en.wikipedia.org/wiki/Makefile und
>http://git.kernel.org/?p=linux/kernel/git/stable/linux-2.6.34.y.git; \
>a=tree;f=drivers/net/wireless/ath/ath5k
>hat mich nicht erleuchtet.

Dann solltest du deine Frage konkreter formulieren. Unter
http://www.gnu.org/software/make/manual/make.html steht eigentlich
alles zu GNU make, was man wissen muss.	

Gruß, Harald