Hi, Ich habe folgendes Problem: make.exe: *** No rule to make target `C:/Dokumente', needed by `main.elf'. Stop. Das Problem wird ja in vielen Foren behandelt, aber ich habe keinen Ansatz gefunden, der mein Problem löst. Meiner Ansicht nach müsste es in folgender Rheienfolge ablaufen: 1. Sourcecode in PN schreiben und unter testordner\test.c abspeichern 2. \WinAVRalt\mfile\makefile_template auch nach testordner\ kopieren 3. makefile_template umbenennen in Makefile 4. Makefile mit mfile editieren:MCU Type auswählen...C-Sourcefile ohne Endung auswählen 5. In PN Sourcecode laden und [WinAVR] Make all wählen Aber genau so geht es eben nicht. Ich habe schon so einiges ausprobiert. Kann mir jemand helfen? Danke!! hinkebäi
Verwende einen Pfad ohne Leerzeichen. "c:\dokumente und einstellungen\hurbelgnurbel\bla\fusel.c" enthält ein Leerzeichen, und das wird von make wie von Dir angegeben ausgewertet, nämlich als "c:\dokumente".
> make.exe: *** No rule to make target `C:/Dokumente', needed by > `main.elf'. Stop. Sieht nach einem typischen Problem mit nicht korrekt gehandhabten Leerzeichen in Dateinamen aus. Das wäre bestimmt nach "Dokumente" noch weitergegangen. Gab's da nicht unter Windows dieses Verzeichnis namens "Dokumente und Einstellungen" oder so?
Danke für den Tipp. Das habe ich aber auch schon ausprobiert.
Mit folgender Verzeichnisstruktur funktioniert es auf jedenfall nicht
und da hat man ja keine spaces in den Namen.
C:\ordner>dir
Datenträger in Laufwerk C: ist System
Volumeseriennummer: 486F-15DA
Verzeichnis von C:\ordner
13.04.2006 10:11 <DIR> .
13.04.2006 10:11 <DIR> ..
13.04.2006 10:11 <DIR> .dep
13.04.2006 10:11 14'116 Makefile
13.04.2006 10:10 14'114 Makefile.bak
12.04.2006 22:27 135 test.c
3 Datei(en) 28'365 Bytes
3 Verzeichnis(se), 6'335'885'312 Bytes frei
Ich frage mich wie make.exe wissen soll, wo sich das makefile
befindet??!!
Gibt es sonst nocht etwas, das man probieren kann.
Man kann probieren das Makefile zu lesen und zu verstehen, wieso make meint, es müsste ein Target C:/Dokumente machen.
> Mit folgender Verzeichnisstruktur funktioniert es auf jedenfall > nicht und da hat man ja keine spaces in den Namen. Vermutlich wird im Makefile immernoch ein solches Verzeichnis eingetragen sein. > Ich frage mich wie make.exe wissen soll, wo sich das makefile > befindet??!! Wenn du nix anderes angibst, sucht es im aktuellen Verzeichnis.
Mir schwant böses ... Wie bitte rufst Du make auf? Per Doppeklick im Explorer?! Das geht naturgemäß in die Hose. Korrekt ist: Start->Ausführen->Cmd.exe in das dann erscheinende Fenster folgendes eintippen: cd \ordner (enter) make (enter) Statt "(enter)" natürlich die entsprechende Taste auf der Tastatur drücken :-)
Und daran denken, daß make "case sensitive" ist. "Test.c" ist nicht gleich "test.c" und "Makefile" ist nicht gleich "makefile"! Reiner
Vielen Dank für deinen Tipp.Leider hat es nichts genützt. Hast du noch
eine Idee?
Danke
D:\>cd test
D:\test>dir
Datenträger in Laufwerk D: ist Daten
Volumeseriennummer: A889-6990
Verzeichnis von D:\test
13.04.2006 16:17 <DIR> .
13.04.2006 16:17 <DIR> ..
13.04.2006 10:08 <DIR> .dep
15.02.2005 19:38 153'600 make.exe
13.04.2006 10:10 14'114 Makefile
13.04.2006 10:08 14'112 Makefile.bak
12.04.2006 22:27 135 test.c
4 Datei(en) 181'961 Bytes
3 Verzeichnis(se), 10'569'564'160 Bytes frei
D:\test>make all
-------- begin --------
avr-gcc (GCC) 3.4.3
Copyright (C) 2004 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.o', needed by `main.elf'.
Stop.
poste dochmal dein makefile. Wahrscheinlich hast Du Leerzeichen anstelle von Tabulatoren drin. Werner
>s/TARGET=main/TARGET=test
oder deutlicher dein Programm heisst test.c
im Makefile hast du aber als TARGET wahrscheinlich main.c angegeben.
Das hat leider wieder nicht funktioniert. Mein Makefile ist im
Dateianhang. Wäre schön, wenn due Zeit finden würdest, es die schnell
anzuschauen.
Hier noch den Inhalt des Ordners, der alle meine Files beinhaltet:
D:\test>dir
Datenträger in Laufwerk D: ist Daten
Volumeseriennummer: A889-6990
Verzeichnis von D:\test
13.04.2006 18:37 <DIR> .
13.04.2006 18:37 <DIR> ..
13.04.2006 10:08 <DIR> .dep
15.02.2005 19:38 153'600 make.exe
13.04.2006 18:37 14'112 makefile
03.02.2005 23:24 13'589 makefile.bak
12.04.2006 22:27 135 test.c
4 Datei(en) 181'436 Bytes
3 Verzeichnis(se), 10'569'490'432 Bytes frei
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.
C:\>cd test
Das System kann den angegebenen Pfad nicht finden.
C:\>d:
D:\>test
D:\>dir
Datenträger in Laufwerk D: ist Daten
Volumeseriennummer: A889-6990
Verzeichnis von D:\
02.03.2006 22:57 <DIR> Bilder
12.04.2006 20:12 <DIR> divFiles
12.04.2006 21:59 <DIR> divProgramme
12.04.2006 20:12 <DIR> filme
12.04.2006 21:54 <DIR> Installationsfiles
20.01.2006 15:33 <DIR> Musik
19.01.2006 23:42 <DIR> rfn
28.02.2006 13:13 <DIR> SPIELE
26.02.2006 19:58 <DIR> temp
13.04.2006 18:37 <DIR> test
19.01.2006 22:27 <DIR> treiber
19.01.2006 23:37 <DIR> zhwin
0 Datei(en) 0 Bytes
12 Verzeichnis(se), 10'569'490'432 Bytes frei
D:\>ccd test
Der Befehl "ccd" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
D:\>cd test
D:\test>dir
Datenträger in Laufwerk D: ist Daten
Volumeseriennummer: A889-6990
Verzeichnis von D:\test
13.04.2006 18:37 <DIR> .
13.04.2006 18:37 <DIR> ..
13.04.2006 10:08 <DIR> .dep
15.02.2005 19:38 153'600 make.exe
13.04.2006 18:37 14'112 makefile
03.02.2005 23:24 13'589 makefile.bak
12.04.2006 22:27 135 test.c
4 Datei(en) 181'436 Bytes
3 Verzeichnis(se), 10'569'490'432 Bytes frei
D:\test>make all s/TARGET=main /TARGET=test
-------- begin --------
avr-gcc (GCC) 3.4.3
Copyright (C) 2004 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.o', needed by `main.elf'.
Stop.
D:\test>
Im Makefile steht TARGET = main Also muss Deine Quelltextdatei auch so heißen. Benenne test.c um in main.c Oder ändere den Eintrag im Makefile. Liest Du eigentlich, was man Dir hier rät? Ich bin damit nämlich nicht der erste ...
Hallo,
ich habe dasselbe Problem.
ich habe eine Datei "timerInit.c und timerInit.h" im Projekt importiert
(uC_FG heißt das Projekt) und im Makefile habe ich Folgenden
geschrieben:
...
TARGET = uC_FG
...
SRC = $(TARGET).c timerInit.c
...
und es funktionniert.
wenn ich aber mehrere Dateien importiere:
inb_lcd_4Zeilen.c und inb_lcd_4Zeilen.h
keypad_lcd.c und keypad_lcd.h
timerInit.c und timerInit.h
dann funktionniert es nicht. Ich vermute ich sollte etwas bei SRC ändern
aber die Syntax könne ich nicht. ich habe mit folgender Änderung
probiert, funktionniert aber nicht:
SRC += $(TARGET).c timerInit.c/$(TARGET).c inb_lcd_4Zeilen.c/$(TARGET).c
keypad_lcd.c
ERROR:
make: Leaving directory
`C:/Users/HP_Advanced/Documents/ArbeitsordnerChristian/testprogramme/uC_
FG/uC_FG'
make: *** No rule to make target `uC_FG/TARGET', needed by `elf'.
Stop.
Was soll ich tun?
Danke
MfG
Christian
Guy Ngamy schrieb: > (uC_FG heißt das Projekt) und im Makefile habe ich Folgenden > geschrieben: > ... > TARGET = uC_FG > ... > SRC = $(TARGET).c timerInit.c > ... > > und es funktionniert. > > wenn ich aber mehrere Dateien importiere: > inb_lcd_4Zeilen.c und inb_lcd_4Zeilen.h > keypad_lcd.c und keypad_lcd.h > timerInit.c und timerInit.h > > dann funktionniert es nicht. Ich vermute ich sollte etwas bei SRC ändern > aber die Syntax könne ich nicht. Na, komm. So schwer ist das auch wieder nicht zu erraten. Da steht SRC = $(TARGET).c timerInit.c Das $(TARGET) sieht irgendwie 'eigen' aus. Gar nicht so, wie sonst Dateinamen aussehen. Zusammen mit TARGET = uC_FG liegt der Schluss recht nahe, dass es sich dabei um eine Ersetzung oder so handelt. d.h. der Text '$(TARGET)' wird durch 'uC_FG' ersetzt. Macht man das mal probehalber (um zu sehen, was dann rauskommt), dann steht da SRC = uC_FG.c timerInit.c So. Wonach sieht das aus? Das sieht so aus, als ob da einfach alle Files der Reihe nach, durch Leerzeichen getrennt, angeführt werden. Das erste File ist durch einen Makro-Mechanismus eingesetzt worden, weil es wohl im Regelfall so ist, dass das Programm erst mal genau so heißen soll, wie das 'Hauptfile', wenn es nur ein einziges Hauptfile gibt. Und damit man bei einem derartigen Makefile den Programmanamen nicht an 25 Stellen im Makefile ändern muss, wird dieser spezielle Name vorgezogen, mittels einem Makro benannt TARGET = meinProgramm und anstelle des eigentlichen Namens kann man dann überall $(TARGET) benutzen, wodurch man nur mehr an einer Stelle im Makefile anpassen muss, wenn man das Makefile ins nächste Projekt weiterkopiert und weiterbenutzt. Macht Sinn. > ich habe mit folgender Änderung > probiert, funktionniert aber nicht: > SRC += $(TARGET).c timerInit.c/$(TARGET).c inb_lcd_4Zeilen.c/$(TARGET).c > keypad_lcd.c Wie du da auf die Idee kommst, du bräuchtest irgendwelche / und weitere $(TARGET) erschliesst sich mir nicht wirklich. Naheliegend wäre das zu benutzen, was weiter oben durch betrachten des Vorhandenen geraten wurde: Einfach alle Files der Reihe nach, mit einem Leerzeichen getrennt, anführen. SRC += $(TARGET).c timerInit.c inb_lcd_4Zeilen.c keypad_lcd.c Macht auch irgendwie Sinn. Denn Programmierer sind faule Hunde, die es gerne haben, wenn die Dinge einfach sind. Und noch einfacher geht ja wohl kaum mehr. > Was soll ich tun? Ein bischen besser analysieren, was du in den Vorgaben siehst und überlegen welche Schlussfolgerungen logischen Sinn ergeben und welche nicht. Und nicht einfach nur irgendwie abmalen.
danke sehr, bin so froh, es funktionniert mit: SRC = $(TARGET).c timerInit.c inb_lcd_4Zeilen.c keypad_lcd.c Gott segnet Sie!!! MfG Christian
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.