2010-01-24 15 views
5

So che il rivestimento perl qui sotto è molto semplice, funziona e fa una sostituzione globale, A per a; ma come lo eseguo in un makefile?Come si esegue un liner Perl one da un makefile?

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

ho provato (ora penso il resto del post è spazzatura come il comando di shell fa una linea di espansione di comando - non quello che voglio) La domanda di cui sopra si ferma!

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

con e senza la seguente riga

EXE = $(APP) 

e ho sempre ottenere il seguente errore

make: APP: Command not found 

che presumo proviene dalla riga che inizia APP

Grazie

+1

Intendi davvero usare l'operatore di sostituzione di Perl? 'perl -pi -e" s/a/A/g "' – toolic

+0

Quindi quale * è * la riga che avvia APP? Sembra che tu stia facendo qualcosa di sbagliato lì; la stessa dichiarazione di APP sembra soddisfacente. – Porculus

risposta

4

Se si desidera eseguire perl come parte dell'azione di un bersaglio, si potrebbe utilizzare

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

(Si noti che c'è un carattere di tabulazione prima echo.) Opzione

di Perl -i è per l'editing di file in -place, ma questo confonderà make (a meno che forse tu stia scrivendo un phony target). Un modello più tipico è quello di creare obiettivi da fonti. Per esempio:

$ 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

Se si facci sapere che cosa stai cercando di fare, saremo in grado di darvi migliori, le risposte più utili.

1

Dovresti mostrare il Makefile più piccolo che mostri il tuo problema e mostrare come lo chiami. Supponendo che il tuo Makefile assomigli a questo, ricevo il messaggio di errore. Si noti che esiste un carattere di tabulazione che precede lo APP nella destinazione all:.

APP = $(shell date) 

all: 
    APP 

Forse volevi dire di fare questo, invece:

APP = $(shell date) 

all: 
    $(APP) 

non ho usato il vostro comando perl perché non funziona per me, così come sono. Intendi davvero usare l'operatore di sostituzione di Perl? perl -pi -e "s/a/A/g"

Questo è un collegamento alla documentazione GNU make.

+0

Sì, voglio eseguire una sostituzione perl su un file da un makefile. La vera sostituzione è più complessa ma non è questo il punto. – Frank

Problemi correlati