Makefiles in C

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
SoFiligran
Beiträge: 8
Registriert: 30.08.2012 11:12:31

Makefiles in C

Beitrag von SoFiligran » 02.09.2012 18:06:53

Hallo Leute,

ich bin ziemlich neu, was Makefiles anbelangt. Jetzt möchte ich folgendes versuchen:

Ich will die Datei prog1.c und prog2.c gleichzeitig compilieren, um zu lernen, wie man Patterns benutzt. Also habe ich folgendes geschrieben:

Code: Alles auswählen

CFLAGS = -I.

INPUT = prog1.c\
         prog2.c

%.o: %.c $(INPUT)
         cc -c -o $@  $(CFLAGS)
Wie Ihr wahrscheinlich seht, hab ich das Prinzip noch nicht ganz verstanden. Auf jeden Fall gibt er mir dann die Fehlermeldung make: *** No targets. Stop.

Kann mir jemand bitte weiterhelfen? :)

Danke und viele Grüße
Zuletzt geändert von Saxman am 03.09.2012 11:15:48, insgesamt 1-mal geändert.
Grund: Titel angepasst. Jeder der hier postet braucht Hilfe, kein Grund das extra hervorzuheben.

SoFiligran
Beiträge: 8
Registriert: 30.08.2012 11:12:31

Re: HILFE!!! Makefiles in C

Beitrag von SoFiligran » 02.09.2012 19:16:52

Ok, ich hab rausgefunden woran es lag. Mir hat das all target gefehlt:

Code: Alles auswählen

.PHONY: all 
all: $(INPUT:%.c=%.o)
Kann mir das allerdings jemand erklären? Ich hab die Lösung woanders gefunden, verstehe aber nicht genau, was das macht.

Benutzeravatar
whisper
Beiträge: 3379
Registriert: 23.09.2002 14:32:21
Lizenz eigener Beiträge: GNU Free Documentation License
Kontaktdaten:

Re: HILFE!!! Makefiles in C

Beitrag von whisper » 02.09.2012 22:06:59

Hhm, C ist schon lange bei mir her.
Aber ich glaube, das .phony überflüssig ist, die all: Zeile sollte reichen, da das der Standerd ist, make sucht im Makefile immer nach all, wenn du kein Target angegeben hast.
Was nimmst du als Editor?
Ich nahm immer xemacs, weil der die Makefile Syntax wunderbar beherrschte. Aber das machen mittlerweile sicher auch andere.
Alter ist übrigens keine Ausrede, nur Erfahrung, die sich stapelt. 😉

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: HILFE!!! HILFEEEEEE!1!!! Makefiles in C

Beitrag von Cae » 03.09.2012 02:07:42

Du könntest dir ja mal ganz spontan das Manual [1] durchlesen. Außerdem gibt es Makefiles zu Hauf' in den Quellpaketen. Da wollte ich das Quell-Paket von Debiannetcat-traditional empfehlen, aber das kompiliert nicht mal… Bug ist gefilt, mal schauen, ob ich Scheiße baue oder der Maintainer.

Gruß Cae

[1] http://www.gnu.org/software/make/manual ... Rules.html
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

SoFiligran
Beiträge: 8
Registriert: 30.08.2012 11:12:31

Re: HILFE!!! Makefiles in C

Beitrag von SoFiligran » 03.09.2012 12:35:02

whisper hat geschrieben:Hhm, C ist schon lange bei mir her.
Aber ich glaube, das .phony überflüssig ist, die all: Zeile sollte reichen, da das der Standerd ist, make sucht im Makefile immer nach all, wenn du kein Target angegeben hast.
Danke, Du hast vollkommen Recht! Es funktioniert auch ohne .PHONY: all

Viele Grüße

Benutzeravatar
shoening
Beiträge: 914
Registriert: 28.01.2005 21:05:59
Lizenz eigener Beiträge: MIT Lizenz

Re: Makefiles in C

Beitrag von shoening » 03.09.2012 12:58:34

Hi,
make sucht im Makefile immer nach all, wenn du kein Target angegeben hast
ist falsch. Make fuehrt, wenn man nichts anderes auf der Kommandozeile angegeben hat, das erste definierte Target aus.

Im folgenden Beispiel gibt ein Aufruf von not-all aus.

Code: Alles auswählen

default: not-all

all:
	@echo "all"

not-all:
	@echo "not-all"
Ciao
Stefan
Bürokratie kann man nur durch ihre Anwendung bekämpfen.

Benutzeravatar
whisper
Beiträge: 3379
Registriert: 23.09.2002 14:32:21
Lizenz eigener Beiträge: GNU Free Documentation License
Kontaktdaten:

Re: Makefiles in C

Beitrag von whisper » 18.09.2012 14:06:07

Dann habe ich wahrscheinlich immer mit all: angefangen... wie gesagt, Äonen her ;-)
Alter ist übrigens keine Ausrede, nur Erfahrung, die sich stapelt. 😉

Antworten