mikrocontroller.net

Forum: Compiler & IDEs Clean Problem


Autor: Torben (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich bekomme immer bei einem Clean folgendes:
Cleaning project:
rm -f test.hex
rm -f test.eep
rm -f test.cof
rm -f test.elf
rm -f test.map
rm -f test.sym
rm -f test.lss
rm -f test.o  
rm -f test.lst
rm -f test.s
rm -f test.d
rm -f .dep/*
chmod 755 test.elf
chmod: test.elf: No such file or directory
make: *** [end] Error 1
CLEAN FAILED (exit value 2, total time: 76ms)
hier mal der Makefile Ausschnitt:
clean: begin clean_list end

clean_list :
  @echo
  @echo $(MSG_CLEANING)
  $(REMOVE) $(TARGET).hex
  $(REMOVE) $(TARGET).eep
  $(REMOVE) $(TARGET).cof
  $(REMOVE) $(TARGET).elf
  $(REMOVE) $(TARGET).map
  $(REMOVE) $(TARGET).sym
  $(REMOVE) $(TARGET).lss
  $(REMOVE) $(OBJ)
  $(REMOVE) $(LST)
  $(REMOVE) $(SRC:.c=.s)
  $(REMOVE) $(SRC:.c=.d)
  $(REMOVE) .dep/*

Woran kann das liegen?

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das liegt daran, daß du test.elf erst löschst und dann mit
chmod die Rechte dafür setzen willst.

Autor: Torben (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja aber im Makefile setze ich doch nirgend wo die Rechte, oder? Das war 
ein fertiges Template.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du zeigst ja weder das ganze makefile, noch den Aufruf.
Irgendwo wird das chmod schon stehen...

Autor: Torben (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe jetzt einfach mal das Makefile aus der Wiki genommen. Da hat 
sich ja einiges geändert zu meinem. Nur jetzt bekomme ich:

error: target system does not support the "dwarf-2" debug format

ach noch was in meinem Makefile wurde
F_CPU = 16000000

geutzt, in dem der Wiki
F_OSC = 16000000

kommt das aufs gleiche?

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welchen Compiler und welchen Prozessor verwendest Du? Gibt es dazu keine 
IDE welche Dir das Makefile-Gefummel abnimmt?

Autor: Torben (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Compiler ist gcc-mp-4.4 CPU Atmega32. Ich nutze Mac, deswegen ist es mit 
einer IDE problematisch. Da nutze ich NetBeans. Das hat leider keine AVR 
Integration.

Autor: Torben (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das mit dem Debug habe ich durch: DEBUG = stabs beseitigt. Nun meckert 
er wegen:

cc1: error: unrecognized command line option "-fwhole-program"

Autor: Torben (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also wenn ich -fwhole-program entferne funktioniert es. Aber kann man 
das bedenkenlos machen?

Autor: eklige Tunke (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Torben schrieb:
> Compiler ist gcc-mp-4.4 CPU Atmega32. Ich nutze Mac, deswegen ist es mit
> einer IDE problematisch. Da nutze ich NetBeans. Das hat leider keine AVR
> Integration.
Code::Blocks
Eclipse

Und bei NetBeans scheinst du dich zu irren, ist zwar für Arm, ansich 
musst du einfach nur auf avr ummünzen und gut ist.
http://www.mikrocontroller.net/articles/Einstieg_i...

Autor: Torben (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das NetBeans klappt ja auch, bis auf den Compiler Fehler jetzt mit dem 
neuen Makefile.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Torben schrieb:
> also wenn ich -fwhole-program entferne funktioniert es. Aber kann man
> das bedenkenlos machen?

Hau es weg, du wirst es nicht vermissen.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PS: vielleicht hast du eine uralte gcc-Version und mit einer neueren 
weniger Ärger?

Autor: Torben (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe Version 4.0.2. Das ist die neuste, die es über Macports gab.

Autor: Torben (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gut der Compiler scheint doch nciht aktuell zu sein. Jetzt habe ich den 
neusten und es erben sich folgende Phänomene:


mit -fwhole-program

undefined reference to ...

für alle Funktionen, die ich in der Main aufrufe, und welche in einer 
anderen Datei definiert sind. Und ohne geht es.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hast du die anderen Dateien auch mal neu kompiliert oder nur mit dem 
alten?

Autor: Torben (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welche anderen meinst du? Die anderen Sources müsste es ja automatisch 
machen die habe ich ja hier angegeben:

SRC += $(TARGET).c...

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aber make geht nur nach Dateidatum.
Wenn du die noch mit dem alten Compiler übersetzt hast, dann den
Compiler wechselst und die Quelltexte nicht editierst, wird make
die auch nicht neu übersetzen lassen.
Schließlich sind die Objektdateien doch neuer als die Quellen -
für make also aktuell kompiliert.

make weiß doch nicht, daß der Compiler getauscht wurde und damit die
Objektdateien veraltet sind.

Es kann ja sein, daß es nur klappt, wenn alles neu übersetzt wird.

Bei sowas macht man doch ein make clean und übersetzt dann neu.

Autor: Torben (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja make clean habe ich schon gemacht. Bringt aber auch nix.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
dann lass halt das -fwhole-program weg; ohne scheint es ja zu gehen

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Option sagt ja auch, daß keine Funktionen nach außen bekannt
gemacht werden sollen (kann also nur gehen, wenn alles in einer
Datei steht).
Hast du mehrere Dateien, musst du die Option weglassen.

http://gcc.gnu.org/onlinedocs/gcc-4.4.3/gcc/Optimi...

Autor: Torben (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja werde ich wohl machen müssen. Mich würde trotzdem interessieren, 
woran das liegt.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Torben schrieb:
> Mich würde trotzdem interessieren, woran das liegt.

kann es sein das du *.c datein mit include eingebunden hast?

Autor: Torben (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein alles über Header.

Autor: ... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
-fwhole-program kann nur funktionieren, wenn es nur einen einzigen 
gcc-Aufruf mit allen .c Dateien auf einmal gibt. Also so etwa:
gcc f1.c f2.c f3.c ...
Oder wenn es generell nur ein einziges .c File gibt.
Wenn mehrere Sourcefiles einzeln kompiliert werden und erst anschließend 
zusammengelinked, dann geht -fwhole-program prinzipiell nicht und man 
muß es weglassen. Der gcc sieht dann halt niemals das komplette Program, 
sondern immer nur jeweils kleine Teile davon.

CU

Autor: Torben (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah danke klingt logisch bis jetzt wird jede Datei einzeln compiliert, 
und anschließend alles gelinkt. Und wenn nur die main compiliert wird. 
Fehlt der Rest beim Linken.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.