Wie benutzt man eine for-Schleife in make rezept

7

Ich möchte eine Schleife verwenden, um einige Dateien zu finden und sie umzubenennen:

%Vor%

Das funktioniert in der Shell. Aber wie kann ich das in einem Makefile-Rezept machen?

    
Steve Wang 06.01.2012, 10:37
quelle

2 Antworten

28

Es gibt zwei wichtige Dinge, die Sie wissen müssen, wenn Sie nicht-triviale Shell-Fragmente in make-Rezepte einfügen:

  1. Kommandos im Rezept werden (natürlich!) einzeln ausgeführt, wobei command "tab-prefixed line im Rezept" bedeutet, möglicherweise über mehrere Makefiles mit Backslashes verteilt.

    Ihr Shell-Fragment muss also auf eine (möglicherweise rückgestrichene) Zeile geschrieben werden. Darüber hinaus wird es der Shell effektiv als einzelne Zeile präsentiert (die Backslashed-Zeilenumbrüche sind keine einfachen Zeilenumbrüche und werden daher nicht als Befehlsterminatoren von der Shell verwendet), müssen also als solche syntaktisch korrekt sein.

  2. Sowohl Shell-Variablen als auch make-Variablen werden durch Dollarzeichen ( $@ , $i ) eingeführt. Daher müssen Sie Ihre Shell-Variablen vor make verbergen, indem Sie sie als $$i schreiben. (Genauer gesagt, jedes Dollarzeichen, das Sie von der Shell sehen möchten, muss von make entkernt werden, indem Sie es als $$ schreiben.)

Normalerweise würden Sie in einem Shell-Skript separate Befehle in separaten Zeilen schreiben, aber hier erhalten Sie effektiv nur eine einzige Zeile, daher müssen die einzelnen Shell-Befehle mit Semikolons getrennt werden. Wenn Sie all dies für Ihr Beispiel zusammenstellen, ergibt sich:

%Vor%

oder äquivalent:

%Vor%

Beachten Sie, dass Letzteres, obwohl es in mehreren Zeilen lesbar ist, die gleiche vorsichtige Verwendung von Semikola erfordert, um die Shell glücklich zu halten.

    
John Marshall 06.01.2012, 12:28
quelle
0

Ich fand das nützlich, indem ich versuche, for-Schleifen zu verwenden, um mehrere Dateien zu erstellen:

%Vor%

Es kompiliert foo.c, bar.c, other.c in die Leiste anderer ausführbarer Dateien

    
fedeb 26.12.2016 21:49
quelle

Tags und Links