首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在使用ExtUtils::MakeMaker时更改脚本/模块中的变量字符串

如何在使用ExtUtils::MakeMaker时更改脚本/模块中的变量字符串
EN

Stack Overflow用户
提问于 2011-03-24 20:34:30
回答 1查看 223关注 0票数 0

我在一个用perl编写的应用程序中有一些模块和脚本。对于它的发行版,我使用ExtUtils::MakeMaker

这些模块和脚本的目标操作系统是Linux。问题的关键是,最终用户会将模块/脚本安装在非标准目录中,可能还会安装在自己的目录中,然后他们会这样安装:

代码语言:javascript
复制
perl Makefile.PL PREFIX='/YOUR/DIRECTORY'
make
make test
make install

ExtUtils::MakeMaker通过PREFIX变量解决了modules/scritps安装目录不规范的问题。

如何将PREFIX字符串的值复制或替换到脚本中?例如,不使用硬编码:

代码语言:javascript
复制
use lib '/YOUR/DIRECTORY';

我想将其替换为如下所示的模板:

代码语言:javascript
复制
use lib '%%PREFIX%%';

在没有设置环境变量($ENV{'PREFIX'})的情况下,在“编译”时间替换%%PREFIX%%

感谢您的回答!!

EN

回答 1

Stack Overflow用户

发布于 2011-03-24 20:54:30

要使用的是PM_FILTER:

代码语言:javascript
复制
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除外(正如你在评论中看到的那样)。

更新以包含更多使用细节:

代码语言:javascript
复制
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。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5419164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档