我知道下面的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的行
由于
答案 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 文档的链接。