我在一个用perl编写的应用程序中有一些模块和脚本。对于它的发行版,我使用ExtUtils::MakeMaker。
这些模块和脚本的目标操作系统是Linux。问题的关键是,最终用户会将模块/脚本安装在非标准目录中,可能还会安装在自己的目录中,然后他们会这样安装:
perl Makefile.PL PREFIX='/YOUR/DIRECTORY'
make
make test
make installExtUtils::MakeMaker通过PREFIX变量解决了modules/scritps安装目录不规范的问题。
如何将PREFIX字符串的值复制或替换到脚本中?例如,不使用硬编码:
use lib '/YOUR/DIRECTORY';我想将其替换为如下所示的模板:
use lib '%%PREFIX%%';在没有设置环境变量($ENV{'PREFIX'})的情况下,在“编译”时间替换%%PREFIX%%
感谢您的回答!!
发布于 2011-03-24 20:54:30
要使用的是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本身,这样就不需要进行窗口检查;然而,在上面的示例中,我发现perl不在执行路径中,而现有的/usr前缀路径已经可以...如果需要,您可以直接在普通WriteMakefile参数列表中定义PM_FILTER。
https://stackoverflow.com/questions/5419164
复制相似问题