makefile für Raspberry Pi (C-Code)

OP #4312980
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
OP #4312983
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
Gast #4312984
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?

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.