我有一个用于 Perl 模块安装的 Makefile,我正在尝试让脚本的安装正常工作。它是由 Makefile.PL 生成的,但模块的作者告诉我,如果我弄清楚 Makefile 应该是什么样子,那么他可以修复 Makefile.PL。无论如何,我正在 Windows 7 上为作者测试它,但它出了问题。问题出在如下所示的目标中:
pure_perl_install :: all
$(NOECHO) $(PERLRUN) -pi.bak -e "s+^use FindBin;.*++" $(INST_SCRIPT)/dtdto ; \
$(PERLRUN) -pi.bak -e "s+^my \$$share =[^;]*+my \$$share = qq{$(INSTALLSHAREDIR)}+" $(INST_SCRIPT)/dtdto ; \
$(CHMOD) $(PERM_RWX) $(INST_SCRIPT)/dtdto
这样做会dmake pure_perl_install
产生以下结果:
C:\strawberry\perl\bin\perl.exe -MExtUtils::Command -e cp -- bin/dtdto blib\script\dtdto
pl2bat.bat blib\script\dtdto
Can't open ;: No such file or directory, <> line 297.
Can't open -pi.bak: No such file or directory, <> line 348.
Can't open -e: No such file or directory, <> line 348.
Can't open s+^my \$share =[^;]*+my \$share = qqC:\strawberry\perl\site/share+: Invalid argument, <> line 348.
Can't open ;: No such file or directory, <> line 645.
Can't do inplace edit on C:\strawberry\perl\bin\perl.exe: File exists, <> line 645.
Can't open -MExtUtils::Command: Invalid argument, <> line 645.
Can't open -e: No such file or directory, <> line 645.
Can't open chmod: No such file or directory, <> line 645.
Can't open --: No such file or directory, <> line 645.
Can't open 755: No such file or directory, <> line 645.
Access is denied.
dmake: Error code 129, while making 'pure_perl_install'
我认为问题在于第一个错误。分号应该在 Makefile 中用于表示单个命令的结束。但是,分号被解释为只是另一个命令参数,并且所有行都变成了一个长命令。然后这会覆盖 perl.exe(在创建备份之后,谢天谢地!),然后尝试运行 perl.exe,这现在是不可能的,并且弹出一条消息说 perl.exe 甚至不是真正的程序。这是一场彻头彻尾的灾难。
我的问题是:如何编辑此目标,以便将分号解释为 dmake 中的命令结束符,而不是作为另一个命令行参数发送?
顺便说一句,删除分号之前的空格作为dtdto
文件名的一部分,这会导致错误,因为它不存在。