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.
> 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 :-)
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.
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.