如何从makefile运行Perl one liner?

时间:2010-01-24 13:50:36

标签: perl makefile

我知道下面的perl one liner很简单,有效并且做全局替换,A代表a;但是如何在makefile中运行它?

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

我试过(我现在认为帖子的其余部分是垃圾,因为shell命令执行命令行扩展 - 不是我想要的!)上面的问题仍然存在!

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

有和没有以下行

EXE = $(APP)

我总是收到以下错误

make: APP: Command not found

我假设它来自启动APP的行

由于

2 个答案:

答案 0 :(得分:4)

如果要将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混淆(除非你写的是phony target)。更典型的模式是从源头制作目标。例如:

$ 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 :(得分:1)

你应该展示最小的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 文档的链接。