从Makefile内部用Perl替换字符串

时间:2011-11-15 17:03:35

标签: perl makefile

我正在尝试用Makel中的perl替换文件中的字符串。

InstallTo = $(PWD)/WebTest

BuildApache:
    mkdir -p WebTest
    cd Source/httpd; ./configure --prefix=$(InstallTo) --exec-prefix=$(InstallTo)
    cd Source/httpd; make; make install
    cd $(InstallTo)/conf; perl -pi -e 's/ServerRoot \"$(InstallTo)\"/ServerRoot/g' httpd.conf
    cd $(InstallTo)/conf; cp -f httpd.conf httpd.conf.orig

我不确定我到底在做什么,我只是试图修改我在网上发现的perl行。我认为这是“弄糟的事情,但我不太了解Perl来修复它。”

2 个答案:

答案 0 :(得分:2)

您可能想尝试:

s|ServerRoot "$(InstallTo)"|ServerRoot|g

您正在使用斜杠粘贴值作为搜索表达式的一部分。它最终成为:

s/ServerRoot \"PWD/WebTest\"/ServerRoot/g

(其中PWD代表任何文字目录规范。)由于你无法逃避斜杠,除非你使用另一个分隔符,否则这总是会有问题。

答案 1 :(得分:0)

由于您的变量包含'/',您需要为正则表达式使用不同的字符,您也可以在具有可包含特殊字符的变量的正则表达式中使用quotemeta或\ Q .. \ E. / p>

s#\QServerRoot "$(InstallTo)"\E#ServerRoot#g

有关详细信息how-do-i-handle-special-characters-in-a-perl-regex

,请参阅此帖子