Iterieren von Listen in Makefiles?

9

Ich finde, ich schreibe eine Menge Makefiles, die mit n -Tupel-Listen aufgeräumt werden können. Aber ich kann keinen Weg finden, dies richtig (und sauber) zu machen. Bisher konnte ich nur mit $ (shell ...) und tr , sed oder anderen Makefile-Standards.

Zum Beispiel möchte ich das tun:

%Vor%

Gibt es eine gute Möglichkeit, n -fache Listen in Makefiles zu iterieren? Danke!

    
Dylan 10.06.2009, 20:21
quelle

6 Antworten

11

Makefiles sind im Grunde genommen deklarativer Natur, also glaube ich nicht, dass sich selbst das zur Verfügung stellt, was Sie wollen. Es scheint jedoch, dass Sie einige Zeichenfolgenwerte mit bestimmten Zielen verknüpfen möchten, also vielleicht die zielspezifische Variable Werte von GNU make werden von Interesse sein. Dies ist ein Auszug aus dem Handbuch:

  

Es gibt noch eine Besonderheit von   zielspezifische Variablen: wenn du   definiere eine zielspezifische Variable,   Dieser Variablenwert ist ebenfalls wirksam   für alle Abhängigkeiten dieses Ziels   (es sei denn, diese Abhängigkeiten überschreiben es   mit ihren eigenen zielspezifischen   variabler Wert). Also zum Beispiel, a   Aussage wie folgt:

     

prog : CFLAGS = -g

     

prog : prog.o foo.o bar.o

     

setzt CFLAGS auf -g im Befehl   Skript für prog , aber es wird auch   Setzen Sie CFLAGS auf -g im Befehl   Skripte, die prog.o, foo.o erstellen,   und bar.o und alle Befehlsskripts   die ihre Abhängigkeiten erstellen.

Wenn Sie es noch nicht gelesen haben, ist das Handbuch von GNU verdammt gut.

Bearbeiten: Um zu tun, worum du in deinem Kommentar gebeten hast:

%Vor%

verwenden:

%Vor%     
anon 10.06.2009, 20:47
quelle
6

Danke für die Hinweise - nach etwas Hacking denke ich, das ist mehr, was ich mir erhofft habe:

%Vor%

Kann jemand es besser machen?

    
Dylan 11.06.2009 15:21
quelle
5

Ich würde das GNU Make-Handbuch auf foreach überprüfen. Hier sind einige zufällige Schnitte, die ich in einem anderen Projekt verwendet habe ... das Beispiel ist unvollständig, aber vielleicht gibt es dir ein paar Ideen? Ich könnte das später aufräumen, wenn ich mehr Zeit habe ...

%Vor%     
Pete 10.06.2009 21:42
quelle
2

Keine, die ich kenne, aber das ist, weil Sie versuchen, die Arbeit zu einer Imperativsprache zu machen, wenn das nicht das ist, was es ist.

In GNU möchten Sie wahrscheinlich etwas tun wie:

%Vor%

Oder besser noch, definieren Sie die Standardregel für .c-Dateien neu, um die Verknüpfung für Sie zu handhaben, aber die seltsame Struktur Ihrer Namen (die Programmnamen haben keine lexikalische Beziehung zu den Quellennamen) macht das schwierig.

Wenn Sie das schnell ohne viel Handbearbeitung wiederherstellen möchten, möchten Sie wahrscheinlich ein Skript schreiben, um das Makefile-Fragment aus Daten zu regenerieren und das include -Feature von GNU make zu verwenden ...

    
dmckee 10.06.2009 20:50
quelle
0

Sie tun es rückwärts.

Sie versuchen, make wie ein Skript zu behandeln. Es ist nicht, stattdessen ist es eine Reihe von Regeln, wie man X gegeben Y. Dann die Mach-Engine herauszufinden, was passieren muss, um dieses Ergebnis zu bekommen.

In diesem Beispiel sollten Sie wirklich ein Skript für die Generierungsschritte verwenden. Vielleicht rufe ich das von make auf, aber lass das CC Zeug machen.

    
caskey 10.06.2009 20:48
quelle
0

Sie können Standardregeln für eine Gruppe von Dateien mit der gleichen Erweiterung wie für das Kompilieren jeder c -Datei zu einer o verwenden. Natürlich sind Sie nicht auf spezielle Dateierweiterungen beschränkt. Um einen Satz von .c Dateien zu kompilieren, könntest du es so machen:

%Vor%     
bluebrother 10.06.2009 21:51
quelle

Tags und Links