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.