Forum: Compiler & IDEs rekursives make clean


von Alexander G (Gast)


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:
1
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:
1
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

von Klaus W. (mfgkw)


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:
1
LIBFS = t1 t2
2
3
all:
4
  echo t - all
5
6
clean:
7
  for i in $(LIBFS); do make -C $$i clean; done

In einem Unterverzeichnis t1/ liegt ebenfalls ein makefile:
1
all:
2
  echo t1 - all
3
4
clean:
5
  echo t1 clean

und in t2/ liegt dieses makefile:
1
all:
2
  echo t2 - all
3
4
clean:
5
  echo t2   clean

Die Ausgabe:
1
klaus@a64a:~/t > make clean
2
for i in t1 t2; do make -C $i clean; done
3
make[1]: Entering directory `/home/klaus/t/t1'
4
echo t1 clean
5
t1 clean
6
make[1]: Leaving directory `/home/klaus/t/t1'
7
make[1]: Entering directory `/home/klaus/t/t2'
8
echo t2 clean
9
t2 clean
10
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?

von Alexander G (Gast)


Angehängte Dateien:

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:
1
C:\Dokumente und Einstellungen\alibaba\Desktop\maketest>make clean
2
for i in a b; do make -C $i clean; done
3
make[1]: Entering directory `C:/Dokumente und Einstellungen/alibaba/Desktop/make
4
test'
5
echo t all
6
t all
7
make[1]: Leaving directory `C:/Dokumente und Einstellungen/alibaba/Desktop/maketest'
8
make[1]: Entering directory `C:/Dokumente und Einstellungen/alibaba/Desktop/maketest'
9
echo t all
10
t all
11
make[1]: Leaving directory `C:/Dokumente und Einstellungen/alibaba/Desktop/maketest'

wenn ich das ganze von sh.exe aus ausführe:
1
sh-2.04$ make clean
2
echo t all
3
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

von klaus (Gast)


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
1
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

von Ludger (Gast)


Angehängte Dateien:

Lesenswert?

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

von Alexander G (Gast)


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

von Klaus W. (mfgkw)


Lesenswert?

na gut, daß wir darüber gesprochen haben :-)

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
Noch kein Account? Hier anmelden.