gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 09:55:27 25 4
gpt4 key购买 nike

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

模块和脚本的目标操作系统是 Linux。关键是我希望最终用户将模块/脚本安装在非标准目录中,也许在他们自己的目录中,然后他们安装如下:

perl Makefile.PL PREFIX='/YOUR/DIRECTORY'
make
make test
make install

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

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

use lib '/YOUR/DIRECTORY';

我想用这样的模板替换它:

use lib '%%PREFIX%%';

其中 %%PREFIX%% 在“编译”时被替换,并且没有设置环境变量 ($ENV{'PREFIX'})

感谢您的回答!!

最佳答案

要使用的是 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 不在 exec 中的实例path 和/usr 的现有 PREFIX 路径已经没问题了...如果需要,您可以直接在普通的 WriteMakefile 参数列表中定义 PM_FILTER。

关于linux - 使用 ExtUtils::MakeMaker 时如何更改脚本/模块中的变量字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5419164/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com