Forum: Compiler & IDEs avr-gcc - kompilierungsproblem


von Martin N. (krivan)


Angehängte Dateien:

Lesenswert?

Hi,

ich probiere meine main.c Datei zu kompilieren, aber ich bekomme die
folgende error-message:


-------- begin --------
avr-gcc (WinAVR 20081205) 4.3.2
Copyright (C) 2008 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is
NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE.

make: ***No rule to make target 'main.elf', needed by 'elf'. Stop.



1. main.c ist in dem gleichen Verzeichnis mit Makefile
2. nutze atmega16
3. nutze winavr-20081205
4. make clean war auch

Hat jemand Idee, was hier das Problem ist? Ich habe schon bereits
nachgegoogelt, Foren gelesen, vieles ausprobiert, aber nix hat mir 
geholfen, oder naja wenigstens habe ich den Fehler nicht gefunden...
Makefile ist im Anhang.

******main.c*******
#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)
}

Danke,
M.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Verzeichnisname auf Sonderzeichen und Leerzeichen kontrollieren:

http://www.mikrocontroller.net/articles/WinAVR#make.exe:_.2A.2A.2A_No_rule_to_make_target_.60main.elf.27.2C_needed_by_.60elf.27.

Unter Vista?
Dann auch Zugriffsrechte des Projektordners prüfen

Schreibweise main.c (passt zum Makefile) oder Main.c (passt nicht) 
prüfen.

von chester (Gast)


Lesenswert?

Soweit ich das sehe,
hast du in deinem Makefile etliche rules mit TABs voran.
und somit werden diese nicht als rules erkannt.

also achte darauf, dass es zB so aussieht:

# Link: create ELF output file from object files.
.SECONDARY : $(TARGET).elf
.PRECIOUS : $(OBJ)
%.elf: $(OBJ)
        @echo
        @echo $(MSG_LINKING) $@
        $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)


Bei dir sind die 3 Zeilen nach dem comment ebenfalls mit einem
führenden TAB, also eingerückt.
make ist da ganz genau mit den TABs.

entweder händisch entfernen oder dir ein neues Makefile besorgen.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Ja da ist vielleicht ein kaputtes Makefile im Umlauf. Die Frage war 
schon mal da: Beitrag "Re: cmd: make - no rule to make target main.elf"

Martin, woher hast du das Makefile? Oder Copy&Paste aus dem Wiki statt 
Download?

von Martin N. (krivan)


Angehängte Dateien:

Lesenswert?

Danke für die Ideen.

Stefan:

Ja, Vista, und habe die Zugriffsrechte jetzt geändert. Hmmm...das ist 
eine gute frage, wo mein Makefile herkommt, kann ich mich daran gar 
nicht erinneren, aber auf jeden Fall war's Copy&Paste...

chester:

Das mit dem TAB hat geholfen!

Jedenfalls habe ich ein anderes Problem. Nachdem make all kommt die 
Fehlermeldung:

main.c:21: fatal error: opening dependency file .dep/main.o.d: No such 
file or directory

[Screenshot im Anhang]

Könnt ihr bitte weiterhelfen?

Danke,
M.

von chester (Gast)


Lesenswert?

Bei folgender Zeile den TAB entfernen
1
# Include the dependency files.
2
-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)

von Martin N. (krivan)


Lesenswert?

Jetzt meckert der Compiler weiter.

Assembler messages:
Fatal error: can't create obj/main.o: No such file or directory
make: ***[obj/main.o] Error 1

Ich habe mir das Makefile ausführlich angekuckt, aber habe keinen 
anderen TAB Fehler gefunden. Woran liegt das Problem?


Übrigens, ich habe eine interessante Webseite gefunden. Vielleicht wird 
sie für jemanden, der ebenso Vindoze Vista nutzen muss, hilfreich.
Der Artikel bezieht sich auf einen Fehler mit Vista und Winavr. Für 
ältere Versionen von Winavr gibt's ein Patch da.

http://forums.ladyada.net/viewtopic.php?f=39&t=8261&p=41342
http://www.madwizard.org/electronics/articles/winavrvista

von chester (Gast)


Lesenswert?

ich denke das hier ist der letzte
1
# Create object files directory
2
$(shell mkdir $(OBJDIR) 2>/dev/null)

von Martin N. (krivan)


Lesenswert?

Ja, danke. Das war das Problem. Jetzt funktioniert es.

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.