从Makefile中用Perl替换字符串

从Makefile中用Perl替换字符串,perl,makefile,Perl,Makefile,我试图从Makefile中用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

我试图从Makefile中用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的了解还不够,无法修复它。”

s|ServerRoot "$(InstallTo)"|ServerRoot|g
您正在粘贴一个带有斜杠的值作为搜索表达式的一部分。该值最终为:

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

(其中PWD代表任何文字目录规范。)由于无法转义斜杠,除非使用替代分隔符,否则这将始终是一个问题。

由于变量包含“/”,因此需要为正则表达式使用不同的字符,也可能需要在具有可包含特殊字符的变量的正则表达式中使用或

s#\QServerRoot "$(InstallTo)"\E#ServerRoot#g
有关更多详细信息,请参阅本文