2010-01-24 9 views
5

Ich kenne die Perl-Liner unten ist sehr einfach, funktioniert und macht eine globale Substitution, A für eine; aber wie laufe ich es in einem Makefile?Wie führe ich einen Perl-Liner aus einem Makefile?

perl -pi -e "s/a/A/g" filename 

ich versucht habe (ich glaube, jetzt der Rest der Post Junk als Shell-Befehl funktioniert eine Erweiterung Kommandozeile - NICHT, WAS ICH WILL) Die oben gestellte Frage steht immer noch!

APP = $(shell perl -pi -e "s/a/A/g" filename) 

mit und ohne die folgende Zeile

EXE = $(APP) 

und ich bekomme immer folgende Fehler

make: APP: Command not found 

die ich kommt aus der Leitung übernehmen, die APP beginnt

Dank

+1

Wollen Sie wirklich den Substitutionsoperator von Perl verwenden? 'perl -pi -e" s/a/A/g "' – toolic

+0

Also was * ist * die Zeile, die APP startet? Es hört sich so an, als ob du etwas falsch machst; die Erklärung von APP selbst sieht gut aus. – Porculus

Antwort

4

Wenn Sie Perl als Teil eines Ziels Aktion ausführen möchten, können Sie

$ cat Makefile 
all: 
     echo abc | perl -pe 's/a/A/g' 
$ make 
echo abc | perl -pe 's/a/A/g' 
Abc

(Beachten Sie, dass es ein TAB-Zeichen vor echo.) Verwenden

Perl -i Option ist für Bearbeiten von Dateien in -Platz, aber das wird make verwirren (außer vielleicht schreiben Sie eine phony target). Ein typischeres Muster besteht darin, Ziele aus Quellen zu machen. Zum Beispiel:

$ cat Makefile 
all: bAr 

bAr: bar.in 
     perl -pe 's/a/A/g' bar.in > bAr 
$ cat bar.in 
bar 
$ make 
perl -pe 's/a/A/g' bar.in > bAr 
$ cat bAr 
bAr

Wenn Sie uns wissen lassen, was Sie versuchen, zu tun, werden wir in der Lage sein, Ihnen bessere, hilfreiche Antworten.

1

Sie sollten das kleinstmögliche Makefile zeigen, das Ihr Problem demonstriert, und zeigen, wie Sie es aufrufen. Angenommen, Ihr Makefile sieht ungefähr so ​​aus, bekomme ich die Fehlermeldung. Beachten Sie, dass vor dem APP im Ziel all: ein Tabulatorzeichen vorhanden ist.

APP = $(shell date) 

all: 
    APP 

Vielleicht bedeutete Sie diese stattdessen zu tun:

APP = $(shell date) 

all: 
    $(APP) 

ich nicht Ihre perl Befehl verwendet haben, weil es für mich nicht ausgeführt wird, wie sie ist. Wollen Sie wirklich den Substitutionsoperator von Perl verwenden? perl -pi -e "s/a/A/g"

Hier ist ein Link zu GNU make Dokumentation.

+0

Ja, ich möchte eine Perl-Ersetzung für eine Datei aus einem Makefile ausführen. Die reale Substitution ist komplexer, aber darum geht es nicht. – Frank

Verwandte Themen