gpt4 book ai didi

Perl: Makefile.PL, File::ShareDir::Install, 先有鸡还是先有蛋

转载 作者:行者123 更新时间:2023-12-04 02:12:58 25 4
gpt4 key购买 nike

File::ShareDir::Install 模块代表了一种使用 Perl 分发/模块携带辅助文件的实用方法。然而,我对如何将它包含在我的项目的依赖项中感到有点困惑。

我试图在一台新机器(实际上是一个带有基本操作系统 + Perl + CPAN 的 docker 容器)上安装我的包,但我得到了错误:

Can't locate File/ShareDir/Install.pm in @INC ... at Makefile.PL line 7.

根据文档 (perldoc File::ShareDir::Install),模式应该是,在我的 Makefile.PL 中:

use ExtUtils::MakeMaker;
use File::ShareDir::Install;

install_share 'share';
install_share dist => 'dist-share';
install_share module => 'My::Module' => 'other-share';

WriteMakefile( ... ); # As you normaly would

package MY;
use File::ShareDir::Install qw(postamble);

但是,通过这样做,我需要将 File::ShareDir::Install 作为运行 Makefile.PL 脚本的要求预先安装在我的系统上。将其声明为依赖项是行不通的,原因很明显!

我应该指示我的用户在我的模块之前显式安装 File::ShareDir::Install 吗?是否可以通过直接调用 CPAN 模块在 Makefile.PL 中以编程方式 安装它?

最佳答案

这就是CONFIGURE_REQUIRES用于:

Available in version 6.52 and above.

A hash of modules that are required to run Makefile.PL itself, but not to run your distribution.

This will go into the configure_requires field of your META.yml and the configure of the prereqs field of your META.json.

Defaults to { "ExtUtils::MakeMaker" => 0 } if this attribute is not specified.

The format is the same as PREREQ_PM.

所以你会添加到你的 WriteMakefile 参数:

CONFIGURE_REQUIRES => {
"ExtUtils::MakeMaker" => '6.52',
"File::ShareDir::Install" => 0,
},

然后使用 cpancpanm 安装模块的人将自动安装 File::ShareDir::Install。

关于Perl: Makefile.PL, File::ShareDir::Install, 先有鸡还是先有蛋,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36650354/

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