2016-05-26 8 views
2

Angenommen ich eine Liste der Datei durch ihre Erweiterung bekannt haben:Make-Datei: Finden Sie rekursiv und löschen Hilfsdateien

EXT=*ext1 *ext2 *ext3 

ich in meinem Make-Datei etwas verwenden wollen, wie

clean:$(EXT) 
    find . -name @< -delete 

Aber ich kann‘ t es funktioniert, weil ich den find-Befehl für jede Erweiterung verwenden muss EXT nicht nur auf der ersten oder für alle zur gleichen Zeit ...

Das Ziel ist es natürlich in der Lage, schnell und hinzuzufügen Re Verschieben Sie die Erweiterung aus der Liste.

+0

Nicht sicher, dass ich verstehe. Ist das was du brauchst? 'für i in $ (EXT); finde es. -name "$$ i" -Delete; done' –

+0

wenn es in einem Makefile funktioniert, ja – PinkFloyd

Antwort

2

Verwenden Sie eine for Schleife:

clean: 
    for i in $(EXT); do find . -name "$$i" -delete; done 
+0

konnte ich es nicht arbeiten lassen, weil ich den Ausdruck "$$" nicht kannte ... Danke – PinkFloyd

+0

@PinkFloyd Kein Problem. Nicht-triviale Shell-Befehle sind merkwürdig in make zu verwenden. Sie müssen sie auch in einer Zeile behalten oder Backslashes verwenden. –

+0

Ich mag deine besser, weil es kürzer ist. Gute Arbeit! – rubicks

2

Hier ist, wie ich es tun würde:

# Makefile 
.PHONY: clean 
clean: CRUFT=$(shell find . -name '*.ext[123]') 
clean: ; rm -f $(CRUFT) 

Referenzen:

+1

Ich wusste nicht über die Option "-o", ich hätte 'finden. -name "* .ext [123]" '. +1 –

+0

Noch besser; Danke. Ich habe meine Antwort entsprechend geändert. – rubicks

+0

Ich wählte die andere Antwort, weil es flexibler und einfacher ist, eine gegebene Erweiterung hinzuzufügen/zu entfernen ... aber thx – PinkFloyd