Seitenleiste

Phony: Pseudoziele

Im Skript aus dem vorherigen Kapitel ist ein eigentlich ein Fehler drin.

CC = gcc
CFLAGS = -Wall
LDFLAGS = -lm
OBJECTS = myprogram.o extention.o

all: myprogram

myprogram.o: myprogram.c myprogram.h
	@$(CC) $(CFLAGS) $(LDFLAGS) -o $myprogram.o myprogram.c
extention.o: extention.c extention.h myprogram.h
	@$(CC) $(CFLAGS) $(LDFLAGS) -o $extention.o extention.c

myprogram: $(OBJECTS)
	@$(CC) $(CFLAGS) $(LDFLAGS) -o myprogram $(OBJECTS)

Der Fehler ist, dass das Ziel 'all' eigentlich keine Datei ist. Würde jemand eine Datei 'all' anlegen, könnte das für Verwirrung sorgen. Wir müssen also make erklären, dass Ziele nicht von Dateien abhängig sind, sondern lediglich Namen im Makefile. In dem Fall werden diese Ziele grundsätzlich erzeugt, unabhängig davon, ob es eine Datei gibt oder nicht.

Dafür erklärt man das Ziel als '.phony':

CC = gcc
CFLAGS = -Wall
LDFLAGS = -lm
OBJECTS = myprogram.o extention.o

.PHONY: all

all: myprogram

...

Normalerweise gibt es keine Probleme, wenn man dateiunabhängige Ziele nicht als .phony deklariert, allerdings lassen sich mit .phony eventuell Probleme vermeiden.