Hallo, mein Projekt hat immer schön compiliert, auf einmal funktioniert es nicht mehr. Die Fehlermeldung habe ich mal im Anhang, eine Lösung dazu finde ich nicht. Google bringt mir da nix was passt. Nun dachte ich: Na gut, das Projekt ist verbockt, mach ich ein neues. Wenn ich das leere compiliere funktioniert es immer wieder, kopiere ich meinen Code aus dem alten Projekt in die C Datei passiert folgendes: Build/Rebuild funktioniert. Clean all funktioniert auch. Rebuild geht wieder Noch ein Rebuild geht nicht, make.exe clean all löscht die Dateien, build geht dann schief. Wieder Rebuild ist dann wieder OK weil clean vorher OK war. Also das Problem ist dass nach einem Build das Löschen und neu compilieren nicht funktioniert, es geht nur der Löschteil. Erst der nächste Schuss compiliert wieder. Wieso hängt das mit meinen C-Code zusammen? Wenn Clean vorher war ist das kein Problem. Und das leere Projekt zeigt diesen Effekt nicht. Ich muss also immer zweimal Rebuild machen oder erst clean und dann Re/Build. Kann jemand die Fehlermeldung erklären? Danke für eure Meinungen.. Thomas
Thomas Schattat schrieb: > Danke für eure Meinungen.. Einfach mal ein neueres Studio ausprobieren ....
Arduinoquäler schrieb: > Einfach mal ein neueres Studio ausprobieren .... hat das Studio da einen Bug?????
Hallo, hab das MAKE File mal angehängt. Das ist das neue Projekt, leer kompiliert es, mit meinem Code ist das Problem da. Maks clean all geht nicht, nur clean, und wenn es clean war geht auch all. Gruß Thomas
in deinem "clean" target hast Du ein rm ohne vorherigen Bindestrich stehen.
1 | # Other Targets |
2 | clean: |
3 | -$(RM) $(OBJS_AS_ARGS) $(EXECUTABLES) |
4 | -$(RM) $(C_DEPS_AS_ARGS) |
5 | rm -rf "DotUhr.elf" "DotUhr.a" "DotUhr.hex" "DotUhr.lss" "DotUhr.eep" "DotUhr.map" "DotUhr.srec" |
Wenn eine der Dateien, die beim letzten rm gelöscht werden sollen, nicht da ist, kehrt das rm-Kommando mit einem Fehler zurück und make bricht (deswegen) ab. Der initiale Bindestrich verhindert das. Mach' den Bindestrich auch vor die letzte Zeile und ich wette, "clean all" funktioniert.
Hi Markus, bin verblüfft und habe das probiert. Funktioniert leider nicht, das Minuszeichen verschwindet automatisch wieder beim Compilieren. Hab dann mal das Makefile schreibgeschützt gemacht, dann kommt ein Fehler dass er nicht drin herumschreiben darf. Das wird also beim Rebuild geändert, wie kommt sowas? Und warum macht es ein frisches leeres Projekt nicht? Gruß Thomas
Markus F. schrieb: > in deinem "clean" target hast Du ein rm ohne vorherigen Bindestrich > stehen. > >
1 | > # Other Targets |
2 | > clean: |
3 | > -$(RM) $(OBJS_AS_ARGS) $(EXECUTABLES) |
4 | > -$(RM) $(C_DEPS_AS_ARGS) |
5 | > rm -rf "DotUhr.elf" "DotUhr.a" "DotUhr.hex" "DotUhr.lss" "DotUhr.eep" |
6 | > "DotUhr.map" "DotUhr.srec" |
7 | > |
> Wenn eine der Dateien, die beim letzten rm gelöscht werden sollen, nicht > da ist, kehrt das rm-Kommando mit einem Fehler zurück und make bricht > (deswegen) ab. Der initiale Bindestrich verhindert das. > > Mach' den Bindestrich auch vor die letzte Zeile und ich wette, "clean > all" funktioniert. Die Erklärung ist leider Nonsens. Der Bindestrich bedeutet jetzt kommt ein optionaler Parameter. -r bedeutet rekursiv, -f bedeutet force. Die Kurzform von beiden ist -rf. Richtig ist, dass -f dazu führt, dass eine fehlende Datei nicht zum Abbruch führt. Siehe "man rm". Gruß Olaf
Thomas Schattat schrieb: > bin verblüfft weil das Studio 6.1 zwar nicht mehr das neueste ist, aber trotzdem problemlos funktioniert hat. Wie schon gesagt wurde, ein Update auf die aktuellste Version sollte auch das Problem lösen. Du kannst zwar versuchen, rauszufinden, warum das jetzt nicht funktioniert, aber ändern kannst du daran eh nichts. Oliver
Also ist das ein bestätigter Bug? Ich werde mal das neueste Studio (ver)suchen und mich melden was dabei herauskam. Erstmal danke an alle die sich gemeldet haben. Gruß Thomas
Olaf Dreyer schrieb: > Markus F. schrieb: >> in deinem "clean" target hast Du ein rm ohne vorherigen Bindestrich >> stehen. >> >>
1 | >> # Other Targets |
2 | >> clean: |
3 | >> -$(RM) $(OBJS_AS_ARGS) $(EXECUTABLES) |
4 | >> -$(RM) $(C_DEPS_AS_ARGS) |
5 | >> rm -rf "DotUhr.elf" "DotUhr.a" "DotUhr.hex" "DotUhr.lss" "DotUhr.eep" |
6 | >> "DotUhr.map" "DotUhr.srec" |
7 | >> |
>> Wenn eine der Dateien, die beim letzten rm gelöscht werden sollen, nicht >> da ist, kehrt das rm-Kommando mit einem Fehler zurück und make bricht >> (deswegen) ab. Der initiale Bindestrich verhindert das. >> >> Mach' den Bindestrich auch vor die letzte Zeile und ich wette, "clean >> all" funktioniert. > > Die Erklärung ist leider Nonsens. Der Bindestrich bedeutet jetzt kommt > ein optionaler Parameter. -r bedeutet rekursiv, -f bedeutet force. Die > Kurzform von beiden ist -rf. Richtig ist, dass -f dazu führt, dass eine > fehlende Datei nicht zum Abbruch führt. Siehe "man rm". > > Gruß > > Olaf Bevor man etwas schreibt, sollte man sich genau lesen und sich informieren. Ich bitte diesen Beitrag zu ignorieren. Gruß Olaf
Thomas Schattat schrieb: > Das wird also beim Rebuild geändert, wie kommt sowas? Und warum macht es > ein frisches leeres Projekt nicht? dann solltest Du versuchen rauszukriegen, warum deine IDE es bei den oberen beiden Zeilen richtig macht und bei der letzten falsch - welche Unterschiede gibt's da bei der Konfiguration des Projekts?
Die Konfiguration is genau gleich. Ich mache ein neues Projekt, Rebuild geht immer. Dann klebe ich meinen Code in die C Datei und das Problem ist da. Die Konfiguration ändere ich dabei gar nicht. Es gibt zwei Header Dateien im selben Verzeichnis die eingebunden werden, sollte davon unabhängig sein. Build geht nur wenn vorher Clean aufgerufen wurde.
So, wie's in deinem Makefile aussieht, ist die Datei, die er löschen will und die nicht erzeugt wird/wurde, "DotUhr.a". Wenn die nicht im Makefile stünde, müsste das "clean all"-Target wahrscheinlich auch so (ohne den initialen Bindestrich) durchgehen. Hast Du irgendwo darum gebeten, daß diese Library erzeugt wird?
Hi, danke für den Hinweis. Was ich gemacht ghabe ist: Neues Projekt, funktioniert. Dann meinen Code in die C-Datei reinkopiert und die beiden Header Dateien mit ins Projekt hinzugefügt. Dann war das Problem da. Glaub das war auch schon ohne das hinzufügen der H Dateien. Wo sollte diese Library denn ausgewählt worden sein? Habe nur eine Datei DotUhr.C drin un die zwei H Dateien die aber anders heißen. Diese sind mit #include dabei. Hänge mal einen Screenshot dran.. Da sehe ich keine library DotUhr.a. Wo kann ich das konfigurieren? Gruß Thomas
Markus F. schrieb: > So, wie's in deinem Makefile aussieht, ist die Datei, die er löschen > will und die nicht erzeugt wird/wurde, "DotUhr.a". Ich denke, dass da der Makefile Generator ganz einfach alle Dateiendungen durchgeht, die so anfallen. Er nimmt den Projektnamen und hängt dann einfach alle Endungen drann. Durch das -rf sollte rm ja auch nicht abbrechen, wenn einige davon nicht vorhanden sind. Denn ein Makefile muss auch dann durchgehen, wenn ich die Ergebnisdateien selbst von Hand lösche.
So, hab das nochmal angesehen. Die Datei *.a wird garnicht erzeugt. Hab dann mal testweise eine andere Datei hinkopiert und diese dann *.a umbenannt. Alle werden mit clean gelöscht, der Fehler bleibt. Nach dem Löschen sin nur noch zwei Dateien da: makedep.mk und makefile. Dann neu Rebuild und alles ist wieder da. Kann das jemand erklären? Gruß Thomas
Thomas Schattat schrieb: > So, hab das nochmal angesehen. Die Datei *.a wird garnicht erzeugt. Logisch. Du wirst ja wohl in den meisten Fällen auch keine Library erzeugen sondern ein ausführbares Programm. .a ist die Endung für Libraries, also Dateien in denen bereits übersetzter Object Code gesammelt und für den Linker als Einheit zusammengestellt wird. > Kann das jemand erklären? Was ich an deine Stelle tun würde. Du sagst, dass ein neues Projekt mit einem minimalistischen Code keine Probleme macht. Dann würde ich mal hergehen und aus dem C-File so gut wie alles auskomentieren, so dass wieder nur das minimalistische main() übrig bleibt. Das muss dann wieder sauber durchgehen. Denn nehm ich vielleicht die beiden Header Files wieder mit rein und probiere, ob noch alles durchgeht. Und dann kommt sukzessive wieder Funktionalität hinzu, wobei ich mir jedesmal ansehe, ob noch alles klappt. Seltsam ist das schon. Blöd ist nur, dass im Log nicht steht, welcher Fehler aufgetreten ist. Irgendwie will ich nicht glauben, dass der rm das Problem darstellt.
:
Bearbeitet durch User
So, hab das mal versucht und alles immer weiter weg kommentiert. Hier wie es ohne Problem funktioniert: #include <avr/io.h> //#include <avr/eeprom.h > #include <avr/interrupt.h> #include <util/delay.h> #include <stdbool.h> #include <string.h> #include <avr/pgmspace.h> Das Problem ist das Leerzeichen hinter eeprom.h, ich glaub es nicht!! Hab erst eeprom.h mal rausgenommen, dann war das Problem weg. Wieder rein, da war es wieder. Dann fiel mir das Leerzeichen auf, weg damit und alles klar! Was ein Mist. Danke an alle die sich Gedanken gemacht haben. Unglaublich !! Gruß Thomas
Ein ähnliches Problem hatte ich auch.... letztendlich lag es am Antiviren Programm.
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.