2010-01-24 5 views
5

Je sais que le liner perl ci-dessous est très simple, fonctionne et fait une substitution globale, A pour un; mais comment puis-je l'exécuter dans un makefile?Comment exécuter un doublage Perl à partir d'un fichier makefile?

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

J'ai essayé (je pense que maintenant le reste du message est indésirable comme la commande shell fait une ligne de commande d'expansion - pas ce que je veux) La question ci-dessus est toujours debout!

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

avec et sans la ligne suivante

EXE = $(APP) 

et je reçois toujours l'erreur suivante

make: APP: Command not found 

que je suppose vient de la ligne qui commence APP

Merci

+1

Voulez-vous vraiment utiliser l'opérateur de substitution de Perl? 'perl -pi -e" s/a/A/g "' – toolic

+0

Alors, quelle * est * la ligne qui démarre APP? On dirait que vous faites quelque chose de mal là-bas; la déclaration d'APP elle-même semble bien. – Porculus

Répondre

4

Si vous souhaitez exécuter perl dans le cadre d'une action de la cible, vous pouvez utiliser

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

(Notez qu'il ya un caractère de tabulation avant echo.)

option de Perl de -i est pour l'édition de fichiers -place, mais cela va confondre make (sauf peut-être que vous écrivez un phony target). Un modèle plus typique consiste à fabriquer des cibles à partir de sources. Par exemple:

$ 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 vous laissez-nous savoir ce que vous essayez de faire, nous serons en mesure de vous donner de meilleures réponses, plus utiles.

1

Vous devriez montrer le Makefile le plus petit possible qui montre votre problème et montrer comment vous l'appelez. En supposant que votre Makefile ressemble à ceci, j'obtiens le message d'erreur. Notez qu'il existe un caractère de tabulation précédant le APP dans la cible all:.

APP = $(shell date) 

all: 
    APP 

Peut-être que vous avez voulu faire à la place:

APP = $(shell date) 

all: 
    $(APP) 

Je n'ai pas utilisé votre commande perl car il ne fonctionne pas pour moi-est. Voulez-vous vraiment utiliser l'opérateur de substitution de Perl? perl -pi -e "s/a/A/g"

Voici un lien vers la documentation GNU make.

+0

Oui, je veux exécuter une substitution perl sur un fichier à partir d'un fichier makefile. La substitution réelle est plus complexe mais ce n'est pas le but. – Frank

Questions connexes