mikrocontroller.net

Forum: Compiler & IDEs rekursives make clean


Autor: Alexander G (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo allerseits!

Ich möchte alle Unterverzeichnisse, die über eigene makefiles verfügen 
cleanen. Die Verzeichnisnamen sind in der variablen LIBFS abgelegt. Dazu 
verwende ich:
for i in $(LIBFS); do cd $$i && make clean && cd ..; done

leider funktioniert das nicht richtig, da das clean hinter dem make 
abgeschitten wird und so ein make all statt make clean ausgeführt wird. 
Wie kann ich make bzw. sh klar machen, dass clean ein argument für make 
ist?

Alternativ habe ich folgendes versucht:
for i in $(LIBFS); do make -C $$i clean; done

Auch hier wird nur make ausgeführt und alle optionen ignoriert.

Was mache ich da falsch? Vielen Dank für die Hilfe!
Alexander

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also, ich sehe das Problem nicht richtig.

Ich wollte deine Fehlerbeschreibung nicht glauben
und habe mal ein paar Dateien zusammengebaut.
In einem Verzeichnis liegt ein makefile:
LIBFS = t1 t2

all:
  echo t - all

clean:
  for i in $(LIBFS); do make -C $$i clean; done

In einem Unterverzeichnis t1/ liegt ebenfalls ein makefile:
all:
  echo t1 - all

clean:
  echo t1 clean

und in t2/ liegt dieses makefile:
all:
  echo t2 - all

clean:
  echo t2   clean

Die Ausgabe:
klaus@a64a:~/t > make clean
for i in t1 t2; do make -C $i clean; done
make[1]: Entering directory `/home/klaus/t/t1'
echo t1 clean
t1 clean
make[1]: Leaving directory `/home/klaus/t/t1'
make[1]: Entering directory `/home/klaus/t/t2'
echo t2 clean
t2 clean
make[1]: Leaving directory `/home/klaus/t/t2'

Es läuft also bei mir make clean auch in Unterverzeichnissen.

Mit welchem OS arbeitest du? Mit welchem make?

Autor: Alexander G (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hmm das kann ich jetzt gar nicht nachvollziehen ... Vielen Dank erstmal 
für deine Mühen, Klaus.
Ich benutze WinAVR-20090313, das aktuelle release. GNU Make 3.81, GNU 
bash 2.04.0(1) sind an Bord. Ich habe deine Teststruktur mal übernommen. 
Allerdings mit total anderem Ergebnis:

wenn ich das ganze in Windows CMD eingebe kommt:
C:\Dokumente und Einstellungen\alibaba\Desktop\maketest>make clean
for i in a b; do make -C $i clean; done
make[1]: Entering directory `C:/Dokumente und Einstellungen/alibaba/Desktop/make
test'
echo t all
t all
make[1]: Leaving directory `C:/Dokumente und Einstellungen/alibaba/Desktop/maketest'
make[1]: Entering directory `C:/Dokumente und Einstellungen/alibaba/Desktop/maketest'
echo t all
t all
make[1]: Leaving directory `C:/Dokumente und Einstellungen/alibaba/Desktop/maketest'

wenn ich das ganze von sh.exe aus ausführe:
sh-2.04$ make clean
echo t all
t all

Das ganze ergibt überhaupt keinen Sinn in meinen Augen. Scheint fast so 
als sei die Shell nicht io.

Für den Fall, dass es sich um ein komplexeres Problem handelt, hab ich 
mal meine makefile Struktur angehängt.
Alex

Autor: klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Doch das macht Sinn und zwar dann, wenn cd nicht funktioniert. Du hast 
Leerzeichen in deinem Pfad, daran kann das liegen.

Versuch mal sowas wie
do cd "$$i" && make clean && cd ..; done

Oder probier alles mal in einem Pfad der keine Leerzeichen enthält. 
Hatte schon öfters unter Windows probleme, weil make mit Pfaden die 
Leerzeichen enthalten einfach nicht zurecht kommt

Viele Grüße

Autor: Ludger (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Habe ich mal von einem netten Kollegen bekommen und funktioniert seit 
Jarenden zuverlaessig unter cygwin.

Autor: Alexander G (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tja also vielen Dank für die Anregungen aber das ganze funktioniert 
jetzt auch bei mir. Der Grund war offensichtlich, dass verschiedene 
Tools im PATH eingetragen sind. Nach der Deinstallation der alten WinAVR 
Versionen und der yagarto Umgebung geht es jetzt irgendwie wieder.

Nicht reproduzierbarer Fehler.

Grüße Alex

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
na gut, daß wir darüber gesprochen haben :-)

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.