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.