make.exe: *** No rule to make target...nichts Hilft!!!!!

Gast #323024
Lesenswert?

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
Gast #323026
Lesenswert?

> 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?
Gast #323027
Lesenswert?

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.
Gast #323029
Lesenswert?

> 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.
Gast #323032
Lesenswert?

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.
Gast #323036
Lesenswert?

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>
Angehängte Dateien:
(Firma: Student) #2812269
Lesenswert?

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
#2812371
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren