Datum:
Angehängte Dateien:Hallo, ich habe wie andere auch das make Problem. habe mich an das Tutorial gehalten, dortiges makefile benutzt. Anders als bei den anderen brichts nicht bei .o sondern bei .elf ab. Nun hab ich mal "make -d" gemacht, und sehr merkwürdiges rausbekommen. Irgendwie scheint es zu glauben das Target sei makefile im erstenschritt, und dann erst main. Dann jeweils scheints zu glauben das Target hieße main.elf.xyz mit xyz = alle möglichen source-endungen wie .c, .o, etc. Dann spricht es davon, "target file sizebefore.." "build" "elf" sich vorzunehmen, aber dann nicht zu finden. sollten diese schlüsselwörter nicht von make ersetzt werden? Nochmal zum grundlegenden verständnis, das im Tutorial erwähnte makefile ist Einsatzbereit? im Anhang debug-Ausgabe. Makefile 1:1 wie im Artikel http://www.mikrocontroller.net/articles/Beispiel_Makefile (Beispiel 1)
Datum:
Bitte poste noch einmal exakt dein Makefile, damit man damit mal was testen kann. Bitte nicht inline, bereits copy&paste kann Fehler verursachen, sondern als Anhang.
Datum:
@ Jörg: Nun, vermutlich ist das genau sein Makefile. ;-) @ Moritz: > Nochmal zum grundlegenden verständnis, das im Tutorial erwähnte makefile > ist Einsatzbereit? Wenn deine C-Datei main.c heißt, dann ja. Heißt sie bei dir aber anscheinend nicht, also musst du das Makefile etwas anpassen.
Datum:
Stefan Ernst wrote:
> Nun, vermutlich ist das genau sein Makefile. ;-)
Ich fürchte halt, dass da in dem Makefile selbst was schief gegangen
ist. Schließlich behauptet es ja nicht, dass es irgendwelche Dateien
nicht finden würde, sondern dass es keine Regel gäbe, die main.elf
zum Ziel hat. Wenn ich mir das Makefile aus dem Download-Link im
Wiki aber nehme, dann ist diese Regel tatsächlich vorhanden, und
entsprechend verhält sich make bei seinem Aufruf auch.
Datum:
Jörg Wunsch wrote: > Wenn ich mir das Makefile aus dem Download-Link im > Wiki aber nehme, dann ist diese Regel tatsächlich vorhanden, und > entsprechend verhält sich make bei seinem Aufruf auch. Wenn ich das Makefile aus dem Link nehme und es kein main.c gibt, kommt genau die obige Fehlermeldung. Mit main.c funktioniert es tadellos. Aber warum genau diese Fehlermeldung kommt, erschließt sich mir auch gerade nicht.
Datum:
Stefan Ernst wrote: > Wenn ich das Makefile aus dem Link nehme und es kein main.c gibt, kommt > genau die obige Fehlermeldung. Seltsam. Ich bekomme dann:
make: *** No rule to make target `main.c', needed by `main.o'. Stop. |
Egal, ob ich das in einer Unix-Shell mache oder in der Msys-Shell oder in cmd.exe. Einziger Unterschied, den ich so sehe: meine makes sind alle noch 3.80, nicht 3.81.
Datum:
Jörg Wunsch wrote: > Seltsam. Ich bekomme dann: > >
make: *** No rule to make target `main.c', needed by `main.o'. > Stop. |
Ist das Directory bei dir denn "clean"? Ich bekomme deine Fehlermeldung dann, wenn es mal ein main.c gegeben hat, und das dep-File noch existiert. > Egal, ob ich das in einer Unix-Shell mache oder in der Msys-Shell > oder in cmd.exe. Einziger Unterschied, den ich so sehe: meine > makes sind alle noch 3.80, nicht 3.81. Bei mir ist es 3.81 in cmd.exe. Was anderes kann ich im Augenblick nicht ausprobieren, da ich unterwegs bin und nichts anderes auf dem Laptop habe.
Datum:
Angehängte Dateien:Frisch aus meinem sample\hellow Verzeichniss. Beim ersten Post hats mir irgendwie nur eine Datei anzuhängen erlaubt. Die Datei heißt main.c , kleingeschrieben. Das Makefile habe ich sowohl mit großem als auch mit kleinem M versucht. Was heißt "clean" bezüglich Verzeichnis? Das ganze läuft übrigens auf NTFS, ich weiß nicht ob die linux-tools damit ein Problem haben. Anhang: C:\winavr\sample\hellow\Makefile
Datum:
Hier nochmal ein dir aus comandline, falls man mir mit main.c nicht
glauben will ;)
C:\winavr\sample\hellow>dir
Volume in Laufwerk C: hat keine Bezeichnung.
Volumeseriennummer: FCE5-47F3
Verzeichnis von C:\winavr\sample\hellow
11.11.2008 05:40 <DIR> .
11.11.2008 05:40 <DIR> ..
11.11.2008 05:40 89 hellow.pnproj
11.11.2008 05:40 59 hellow.pnps
10.11.2008 20:28 579 main.c
10.11.2008 20:30 16.838 Makefile
4 Datei(en) 17.565 Bytes
2 Verzeichnis(se), 39.128.940.544 Bytes frei
C:\winavr\sample\hellow>
Und nur falls es irgendwie Bedeutung hat... main.c:
/* Alle Zeichen zwischen Schrägstrich-Stern
und Stern-Schrägstrich sind lediglich Kommentare */
// Zeilenkommentare sind ebenfalls möglich
// alle auf die beiden Schrägstriche folgenden
// Zeichen einer Zeile sind Kommentar
#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)
}
Datum:
Stefan Ernst wrote: > Ist das Directory bei dir denn "clean"? Ich bekomme deine Fehlermeldung > dann, wenn es mal ein main.c gegeben hat, und das dep-File noch > existiert. OK, hast Recht. .dep hatte ich vergessen. Wenn ich das wegräume, sieht es aber immer noch vernünftig aus:
make: *** No rule to make target `main.o', needed by `main.elf'. Stop. |
Datum:
Angehängte Dateien:Ich habe mal make -p gemacht, herauskommt eine Ellenlange Liste die mir als noob überhaupt nix sagt. Aber vielleicht gibts hier ein paar cracks die mit einem Blick die Diagnose schaffen? Übrigens diesmal Make 3.80, bringt aber selben Fehler.
Datum:
Angehängte Dateien:Du benutzt ein komplett anderes Makefile als ich, das sagen mir bereits die völlig unterschiedlichen Zeilennummern in diesem Text. Da du deins nicht anhängst, hier nochmal das, was ich aus der Wiki-Seite habe.
Datum:
Doch ich habs doch angehängt, 5 Posts weiter oben...
Datum:
Aus welchem Wiki meinst du hast du es her? Also es ist anders als jene vom hiesigen Artikel meines ersten Posts. Was mir auf den ersten Blick an unterschied auffällt sind die Verzeichnis Definitionen die bei meiner Version fehlen... Aber es sollte ja trotzdem funktionieren, da ich make im Verzeichnis des Makefiles aufrief?
Datum:
Moritz wrote:
> Doch ich habs doch angehängt, 5 Posts weiter oben...
Sorry, hatte ich übersehen. Ja, das Teil ist komplett kaputt.
Beispielsweise das, was zu besagtem Fehler führt:
# Link: create ELF output file from object files.
.SECONDARY : $(TARGET).elf
.PRECIOUS : $(OBJ)
%.elf: $(OBJ)
@echo
@echo $(MSG_LINKING) $@
$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
|
Nun vergleich das mal mit dem, wie es sein sollte:
# Link: create ELF output file from object files.
.SECONDARY : $(TARGET).elf
.PRECIOUS : $(OBJ)
%.elf: $(OBJ)
@echo
@echo $(MSG_LINKING) $@
$(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS)
|
Dummerweise sind führende (hard!) TABs für ein Makefile von grund- legender Bedeutung. Vielleicht nimmst du ja doch einfach das mfile-Tool.
Datum:
tatsache... es funktioniert! offenbar habe ich immer mit der Copy n Paste Version vom Artikel gearbeitet, das hätte ich mir eigentlich auch denken können. Jetzt tuts auch in PN. Danke Jörg! Sollte man vielleicht eine Warnung für ähnlich unbedarfte im Artikel vermerken, das Copy&Paste zu unterlassen ist?
Datum:
(wenn man stattdessen den Link benutzt mit speichern unter kommt das saubere Makefile an)
Datum:
Moritz wrote: > Sollte man vielleicht > eine Warnung für ähnlich unbedarfte im Artikel vermerken, das Copy&Paste > zu unterlassen ist? Nun, es ist ein Wiki, hättest du also auch gleich selbst ändern können. Ich habe eine Bemerkung hinzu gefügt.
Datum:
Werde ich nächstes mal machen, danke nochmal für deine Hilfe!
Datum:
Angehängte Dateien:Ich greif den Thread hier mal auf, da ich das selbe Problem hab. Ich finde ich hab alles richtig gemacht. Makefile mit großem M, main.c klein geschrieben usw. main.c ist ok, das Makefile sollte auch in Ordnung sein. Zuerst schreibe ich, zur Sicherheit, "make clean" und dann "make all" in di DOS-Box. Aber irgendwie bekomme ich immer die Fehlermeldung:
make: *** No rule to make target 'main.elf', needed by elf. Stop. |
Im Anhang ist mein Makefile. Hoffe mir kann jemand weiterhelfen.
Datum:
Hm, hat sich erledigt. Die Hektik war mein Feind. Hab im Makefile STK500v2 angegeben anstatt STK500. Jetzt läufts. Trotzdem danke