我在用perl编写的应用程序中有一些模块和脚本。对于它的分发我使用ExtUtils::MakeMaker
。
模块和脚本的目标操作系统是Linux。关键是我希望最终用户将模块/脚本安装在非标准目录中,也可能在他们自己的目录中,然后安装如下:
perl Makefile.PL PREFIX='/YOUR/DIRECTORY'
make
make test
make install
当模块/ scritps安装目录不是标准目录并且ExtUtils::MakeMaker
变量时, PREFIX
解决了这个问题。
如何将PREFIX
字符串'值复制或替换为脚本?例如,而不是硬代码:
use lib '/YOUR/DIRECTORY';
我想将其替换为以下模板:
use lib '%%PREFIX%%';
其中%%PREFIX%%
在“编译”时间内被替换,并且没有设置环境变量($ENV{'PREFIX'}
)
感谢您的回答!!
答案 0 :(得分:2)
要使用的是PM_FILTER:
if (!($^O eq 'MSWin32' || $Config{'ccflags'} =~ /-D_?WIN32_?/)) {
# doesn't work on windows: no sed
$opts{'PM_FILTER'} = 'sed -e "s|/usr/share|$(PREFIX)/share|"';
}
哪个适用于linux以及除了windows之外的所有内容(正如您在评论中看到的那样)。
[已更新,包含更多使用详情:]
use ExtUtils::MakeMaker;
%opts = (
'NAME' => 'myModulesAndScripts',
# ...
);
if (!($^O eq 'MSWin32' || $Config{'ccflags'} =~ /-D_?WIN32_?/)) {
# doesn't work on windows: no sed
$opts{'PM_FILTER'} = 'sed -e "s|/usr/share|$(PREFIX)/share|"';
}
WriteMakefile(%opts);
(正如指出的那样,您可以尝试在PM_FILTER中调用perl本身,因此您不需要Windows检查;但是,在上面的示例中,我发现了perl不在exec中的实例路径和/ usr的现有PREFIX路径已经正常...如果需要,可以直接在普通的WriteMakefile参数列表中定义PM_FILTER。