Как мне запустить Perl one liner из make-файла? - PullRequest
5 голосов
/ 24 января 2010

Я знаю, что perl one liner ниже очень прост, работает и выполняет глобальную замену, A для a; но как мне запустить его в make-файле?

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

Я пытался (теперь я думаю, что остальная часть поста является ненужной, поскольку команда оболочки выполняет расширение командной строки - НЕ ЧТО Я ХОЧУ!)

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

со следующей строкой и без нее

EXE = $(APP)

и я всегда получаю следующую ошибку

make: APP: Command not found

, который я предполагаю, происходит от строки, которая запускает приложение

Спасибо

Ответы [ 2 ]

4 голосов
/ 24 января 2010

Если вы хотите запустить Perl как часть действия цели, вы можете использовать

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

(Обратите внимание, что перед echo стоит символ TAB).

Опция Perl -i предназначена для редактирования файлов на месте, но это может сбить с толку make (если, возможно, вы не пишете фальшивую цель ). Более типичным примером является создание целей из источников. Например:

$ 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

Если вы сообщите нам, что вы пытаетесь сделать, мы сможем дать вам лучшие, более полезные ответы.

1 голос
/ 24 января 2010

Вы должны показать наименьший возможный Makefile, который демонстрирует вашу проблему, и показать, как вы его называете. Предполагая, что ваш Makefile выглядит примерно так, я получаю сообщение об ошибке. Обратите внимание, что перед целью APP в цели all: стоит символ табуляции.

APP = $(shell date)

all:
    APP

Возможно, вы хотели сделать это вместо этого:

APP = $(shell date)

all:
    $(APP)

Я не использовал вашу команду perl, потому что она не работает для меня как есть. Вы действительно хотите использовать оператор замещения Perl? perl -pi -e "s/a/A/g"

Вот ссылка на документацию GNU make .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...