Hallo an alle.
Ich versuche einen Atwega48 zu programmieren und wollte erst mal die 
compilierchain mittels eines Testprogs zu durchlaufen, welches ich
aus dem Tutorial habe.
#include <avr/io.h>          // (1)
int main (void) {            // (2)
   DDRB  = 0xff;             // (3)
   PORTB = 0x03;             // (4)
   while(1) {                // (5a)
     /* "leere" Schleife*/;  // (5b)
   }                         // (5c)
   /* wird nie erreicht */
   return 0;                 // (6)
}
Ich erhalte jedoch folgenden Kompilierfhler.
------------------------------------------------------------------------ 
--
> "make.exe" all
Compiling C: test.c
avr-gcc -c -mmcu=atmega48 -I. -gdwarf-2 -DF_CPU=8000000UL -O0 
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall 
-Wstrict-prototypes -Wa,-adhlns=./test.lst  -std=gnu99 -Wundef -MMD -MP 
-MF .dep/test.o.d test.c -o test.o
Compiling C: ../test1/test.c
avr-gcc -c -mmcu=atmega48 -I. -gdwarf-2 -DF_CPU=8000000UL -O0 
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall 
-Wstrict-prototypes -Wa,-adhlns=./../test1/test.lst  -std=gnu99 -Wundef 
-MMD -MP -MF .dep/test.o.d ../test1/test.c -o ../test1/test.o
Linking: test.elf
avr-gcc -mmcu=atmega48 -I. -gdwarf-2 -DF_CPU=8000000UL -O0 
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall 
-Wstrict-prototypes -Wa,-adhlns=test.o  -std=gnu99 -Wundef -MMD -MP -MF 
.dep/test.elf.d test.o ../test1/test.o --output test.elf 
-Wl,-Map=test.map,--cref     -lm
../test1/test.o: In function `main':
../test1/test.c:7: multiple definition of `main'
test.o:../test1/test.c:7: first defined here
make.exe: *** [test.elf] Error 1
> Process Exit Code: 2
> Time Taken: 00:10
------------------------------------------------------------------------ 
--
Die Makefile ist im gleichen Verzeichnis wie das c-prog.
nutze winavr20070525
Ich bitte um Hilfe.
Danke im Voraus!
  > Compiling C: test.c > ... > Compiling C: ../test1/test.c Du hast 2 Files im makefile eingetragen Einmal das test.c auf dem aktuellen Verzeichnis und ein zweitesmal die Datei ../test1/test.c Und ich rate jetzt mal ins Blaue hinein: In beiden Files gibt es jeweils eine Funktion main()
---------------------------------------------------- Du hast 2 Files im makefile eingetragen Einmal das test.c auf dem aktuellen Verzeichnis und ein zweitesmal die Datei ../test1/test.c ----------------------------------------------------- das was du meinst ist aber 2 mal die gleiche datei Im makefile soll doch einmal der dateiname ohne endung (TARGET = test) und einmal die datei inklusive pfadangegeben (SRC = $(TARGET).c ../test1/test.c) angegeben werden, so wie ich das verstanden habe. und diese ist jewils test.c und wenn ich eins von beiden nicht eintrage, tauchen wieder kompilier fehler auf?
Amir B-a wrote: > ---------------------------------------------------- > Du hast 2 Files im makefile eingetragen > Einmal das test.c auf dem aktuellen Verzeichnis und > ein zweitesmal die Datei ../test1/test.c > ----------------------------------------------------- > > das was du meinst ist aber 2 mal die gleiche datei Das ist wurscht, denn im Linker > avr-gcc -mmcu=atmega48 -I. -gdwarf-2 -DF_CPU=8000000UL -O0 > -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall > -Wstrict-prototypes -Wa,-adhlns=test.o -std=gnu99 -Wundef -MMD -MP -MF > .dep/test.elf.d test.o ../test1/test.o --output test.elf ****** *************** taucht dann 2 mal die gleiche Datei auf, was mit Sicherheit Probleme geben wird. Du musst an deinem Makefile arbeiten. > Im makefile soll doch einmal der dateiname ohne endung (TARGET = test) > und einmal die datei inklusive pfadangegeben (SRC = $(TARGET).c > ../test1/test.c) angegeben werden, so wie ich das verstanden habe. Das $(TARGET).c ist doch schon die Datei. TARGET ist ein Platzhalter und expandiert zu test. Damit steht dann da SRC = test.c ../test1/test.c und somit hast du 2 Source code files angegeben. Du brauchst aber nur eines. An der SRC Vorgabe brauchst du dich nur vergreifen, wenn dein komplettes Projekt aus mehr als einem *.c File besteht. Ansonsten lässt man die in Ruhe.
OK ich hab den Fehler gefunden: im Makefile muss das $target weg bei SRC = $(TARGET).c../test1/test.c bzw wenn mann die c/c++ source file angibt das häckschen bei include weg machen. danke karl.
> An der SRC Vorgabe brauchst du dich nur vergreifen, wenn dein > komplettes Projekt aus mehr als einem *.c File besteht. Ansonsten > lässt man die in Ruhe. ohne der src vorgabe geht es aber auch nicht! aber jetzt läufts ja danke noch mal
Amir B-a wrote: > OK ich hab den Fehler gefunden: > > im Makefile muss das $target weg bei > SRC = $(TARGET).c../test1/test.c Das ist nicht so schlau. SRC = $(TARGET).c wäre besser
Amir B-a wrote: >> An der SRC Vorgabe brauchst du dich nur vergreifen, wenn dein >> komplettes Projekt aus mehr als einem *.c File besteht. Ansonsten >> lässt man die in Ruhe. > > ohne der src vorgabe geht es aber auch nicht! Ich sag ja nicht, dass du sie komplett rausnehmen sollst. SRC = $(TARGET).c So stands ursprünglich mal drinn. Und wenn man nur 1 *.c hat, gibt es keinen Grund daran was zu ändern
ja ist einleuchtend. mach ich ab jetzt auch so. sehe aber gerdae das das makefile es sowieso durch SRC = $(TARGET).c ersetzt hat. Danke nochmal :-)
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
Mit Google-Account einloggen
  Noch kein Account? Hier anmelden.