从Makefile中用Perl替换字符串
我试图从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
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
有关更多详细信息,请参阅本文