2010-01-24 8 views
5

Sé que el liner de Perl a continuación es muy simple, funciona y hace una sustitución global, A por a; pero ¿cómo lo ejecuto en un archivo MAKE?¿Cómo ejecuto un trazador de líneas Perl de un archivo MAKE?

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

He tratado (I piensan ahora que el resto de la entrada es basura como el comando shell hace una expansión de la línea de comandos - NO LO QUE QUIERO) La pregunta anterior sigue en pie!

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

con y sin la línea siguiente

EXE = $(APP) 

y siempre me sale el siguiente error

make: APP: Command not found 

que yo supongo que proviene de la línea que comienza APP

Gracias

+1

¿Realmente quiere usar el operador de sustitución de Perl? 'perl -pi -e" s/a/A/g "' – toolic

+0

Entonces, ¿qué * es * la línea que inicia la APLICACIÓN? Parece que estás haciendo algo mal allí; la declaración de APP se ve bien. – Porculus

Respuesta

4

Si desea ejecutar Perl como parte de la acción de un objetivo, es posible utilizar

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

(Tenga en cuenta que hay un carácter de tabulación antes echo.) Opción

de Perl -i es para la edición de ficheros -place, pero eso confundirá make (a menos que tal vez esté escribiendo un phony target). Un patrón más típico es hacer objetivos a partir de las fuentes. Por ejemplo:

$ 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

Si usted nos deja saber lo que estás tratando de hacer, estaremos en condiciones de darle mejores respuestas, más votos.

1

Debe mostrar el Makefile más pequeño posible que demuestre su problema y mostrar cómo lo está llamando. Asumiendo que tu Makefile se ve algo así, recibo el mensaje de error. Tenga en cuenta que hay un carácter de tabulación que precede al APP en el objetivo all:.

APP = $(shell date) 

all: 
    APP 

Tal vez significaba que hacer esto en su lugar:

APP = $(shell date) 

all: 
    $(APP) 

no hizo uso de su comando perl porque no se ejecuta para mí como está. ¿Realmente quiere usar el operador de sustitución de Perl? perl -pi -e "s/a/A/g"

Aquí hay un enlace a la documentación de GNU make.

+0

Sí, deseo ejecutar una sustitución perl en un archivo de un archivo MAKE. La sustitución real es más compleja, pero ese no es el punto. – Frank

Cuestiones relacionadas