Makefile: Wie wendet man einen gleichwertigen filter auf mehrere wildcards
Ich Schreibe ein Makefile und ich stecken in einer filter-Funktion der Begrenzung.
In der Tat, filter nimmt nur einen Platzhalter.
Was ich tun möchte ist:
Ich habe eine Liste von Dateien, einige passende regexp blabla, einige nicht. Aber dafür brauche ich 2 Platzhalter, so kann ich nicht verwenden filter-Funktion.
Möchte ich spaltete meine ursprüngliche Liste in 2 Listen, die eine enthält alle element mit dem blabla string (filter entspricht) und die andere mit den nicht passenden eine (filter-out-äquivalent).
vielen Dank für Ihre Hilfe.
- Verwenden Sie GNU-make oder eine andere Variante? Und zeigen Sie Ihre aktuelle code, es ist nicht klar, was das problem ist.
- Bitte geben Sie eine Liste von Dateien, filter-Ausdruck und gewünschte Ergebnis. Die Art und Weise Sie es jetzt beschreiben, es ist mir nicht klar, warum die
$(filter ...)
und$(filter-out ...)
Funktionen sind nicht gut genug für Sie. - Vielen Dank für Ihre Antwort. Ich bin mit gnu make. Ich habe keinen code zu zeigen, weil ich kann nicht herausfinden, wie es zu schreiben. Sagen, ich haben LISTE= a_old_tt x_old_da a_new_da q_ty_we. Ich würde gerne die LISTE Sortieren Inhalt: LIST_OLD, die enthält alle Elemente der LISTE mit dem Ausdruck alt (a_old_tt und x_old_da in meinem Beispiel), und LIST_NOT_OLD, die enthält alle Elemente der LISTE nicht mit dem Ausdruck alt (a_new_da q_ty_we in meinem Beispiel).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie dies tun, ohne ausführen eines externen Kommandos. Definieren Sie die beiden Makros
Können Sie jetzt tun,
make
können nicht mit regulären Ausdrücken an alle, also, wenn Sie Sie brauchen (aber OP nicht), Sie offensichtlich nicht mit dieser Antwort. Die erste Reaktion auf dieses problem wird oft bringen die großen Kanonen, und ruft ein externes Kommando zu tun, das matching, aber wie dieser Fall zeigt, dass enorme overkill. Ich vermeide das ausführen externer Befehle, soweit wie möglich, sowohl für die Portabilität und Geschwindigkeit. Ich habe gesehen, enorme performance-Gewinne von loszuwerden unnötige externe Befehle, die in großen make-basiertes build-Systeme.Einer Machen die größten Schwächen ist Ihre schlechte Fähigkeit zum Umgang mit regulären Ausdrücken. Die Funktionen
filter
undfilter-out
kann nicht gefunden "alten" in der Mitte eines Wortes. Ich würde vorschlagen, diesen hack:Könnten Sie nutzen die shell erweiterte string-handling-Funktionen. Angenommen, Sie haben
bash
haben, könnten Sie Folgendes in Ihremakefile
:Finden Sie eine Erklärung der bash-string-Austausch-Mechanismus in so löschen Sie Elemente aus einem array basiert auf dem Muster. Die Doppelzimmer
$
erforderlich ist, damit der$
Zeichen in der shell-Aufruf.