Forum: Mikrocontroller und Digitale Elektronik makefile für Raspberry Pi (C-Code)


von Andreas W. (andy_w)


Lesenswert?

Hallo,
ein einziges Mal hat es funktioniert, danach nie wieder, selbst, nachdem 
ich auf die SD-Karte das Rasbian Wheezy neu aufgespielt habe.

Das makefile lautet folgendermaßen: (nach dem Buch Rasbperry Pi von 
Kofler, Kühnast, Scherbeck vom Heise-Verlag)
1
CC = gcc
2
CFLAGS = -l .
3
INCL = 
4
OBJ = main.c
5
6
preamp: $(obj)
7
        $(CC) $(CFLAGS) -o preamp $(obj)         # Tab am Zeilenanfang!
8
9
%.o: %.c $'(INCL)
10
         $(CC) $(CFLAGS) -c -o $@ %<             # Tab am Zeilenanfang!

Das Programm hat momentan nur main.c, noch keine weiteren c-Files und 
keine h-Files.

nun erhalte ich immer folgende Fehlermeldung:
1
make: Warning: File 'preamp' has modification time 1203 s in the future
2
gcc C(CFLAGS) -c -o main.o main.c
3
/bin/sh: 1: Syntax error: "(" unexpected
4
makefile:10: recipe for target 'main.o' failed
5
make: *** [main.o] Error 2

Das File preamp ist das Programm, das ich händisch mit gcc -c und gcc -o 
erzeugt habe, so funktioniert es, nur nicht mit make. Lösche ich das 
File, verschwindet die erste Fehlermeldung, der Rest bleibt aber.

/bin/sh habe ich nie angefaßt, die SD-KJarte frisch mit dem Image 
beschrieben. Also wieso kann da ein Syntaxerror drin sein?

Seltsamerweise hat das beim ersten Mal einmal geklappt, dann nie wieder, 
auch nicht nach dem erneuten schreiben des Images für die SD-Karte.

Hat da jemand eine Idee, was da schief gehen kann?

Gruß
Andy

von Andreas W. (andy_w)


Lesenswert?

Hallo,
hat sich erledigt!

in der letzten Zeile von makefile steht statt

         $(CC) $(CFLAGS) -c -o $@ %<             # Tab am Zeilenanfang!

         $(CC) C(CFLAGS) -c -o $@ %<             # Tab am Zeilenanfang!

da hat sich ein $ in ein C verwandelt, wahrscheinlich bin ich mit 
Wurstfingern auf die Tastatur gekommen und habe es noch einmql 
abgespeichert. Nun funktioniert es wieder.

Gruß
Andy

von Programmierer (Gast)


Lesenswert?

Andreas W. schrieb:
> CFLAGS = -l .
Das ist quatsch. Auf -l folgt immer direkt ein Library-Name, den man 
linken will (z.B. -lm zum linken der libm). Der Punkt ist 
dementsprechend auch falsch.

Andreas W. schrieb:
> preamp: $(obj)
> $(CC) $(CFLAGS) -o preamp $(obj)         # Tab am Zeilenanfang!

oben schreibst du obj groß, und da klein. Du meinst vermutlich $(OBJ).

Dieses makefile ist vermutlich dafür gedacht, in "OBJ" die Namen der 
Object Files hineinzuschreiben. Du schreibst aber den Namen einer 
Sourcecode Datei hinein. Vermutlich ist das also so gedacht:
OBJ = main.o
Nur dann wird auch die zweite (Pattern) Regel überhaupt verwendet.

Andreas W. schrieb:
> %.o: %.c $'(INCL)
Das $'(INCL) ist Quatsch, es sollte $(INCL) sein.

Andreas W. schrieb:
> $(CC) $(CFLAGS) -c -o $@ %<             # Tab am Zeilenanfang!
Das %< ist quatsch, es sollte $< sein.

Andreas W. schrieb:
> /bin/sh habe ich nie angefaßt, die SD-KJarte frisch mit dem Image
> beschrieben. Also wieso kann da ein Syntaxerror drin sein?
Der Syntaxfehler ist nicht in /bin/sh (was sowieso ein Binärprogramm 
ist...), sondern im Aufrug von /bin/sh:

Andreas W. schrieb:
> gcc C(CFLAGS) -c -o main.o main.c
ist keine gültige shell-Syntax.


Wie schafft man es, beim Abschreiben so viele Fehler zu machen?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.