ExtUtils::Install - 从此处安装文件到此处
use ExtUtils::Install;
install({ 'blib/lib' => 'some/install/dir' } );
uninstall($packlist);
pm_to_blib({ 'lib/Foo/Bar.pm' => 'blib/lib/Foo/Bar.pm' });
2.22
处理 perl 模块、脚本、手册页等的安装和卸载...
install() 和 uninstall() 都特定于 ExtUtils::MakeMaker 处理 perl 模块的安装和卸载的方式。它们并非设计为通用工具。
在某些操作系统(如 Win32)上,可能需要在重新启动后才能进行安装。这会产生不同的后果:删除旧 DLL 不会影响使用新 DLL 的程序,但如果新 DLL 在重新启动之前无法正确安装,则任何依赖它的内容都必须等待。包变量
$ExtUtils::Install::MUST_REBOOT
用于存储此状态。
如果此变量为真,则已发生此类操作,并且在重新启动之前,任何依赖于此模块的操作都无法继续进行。
如果此值已定义但为假,则已发生此类操作,但不会影响后续操作。
# deprecated forms
install(\%from_to);
install(\%from_to, $verbose, $dry_run, $uninstall_shadows,
$skip, $always_copy, \%result);
# recommended form as of 1.47
install([
from_to => \%from_to,
verbose => 1,
dry_run => 0,
uninstall_shadows => 1,
skip => undef,
always_copy => 1,
result => \%install_results,
]);
将 %from_to 的每个目录树复制到其相应的值,同时保留时间戳和权限。
哈希中具有特殊含义的两个键是:“read”和“write”。它们包含 packlist 文件。复制完成后,install() 将目标文件列表写入 $from_to{write}。如果给出了 $from_to{read},则此文件的内容将合并到写入的文件中。读取和写入的文件可能相同,但在 AFS 上,人们很可能将文件安装到与文件稍后出现的目录不同的目录中。
如果 $verbose 为真,则将打印出每个已删除的文件。默认为假。这是“make install VERBINST=1”。$verbose 值高达 5,显示越来越多的诊断输出。
如果 $dry_run 为真,它将仅打印它将要执行的操作,而不会实际执行。默认为假。
如果 $uninstall_shadows 为真,则将卸载 @INC 中所有不同的版本。这是“make install UNINST=1”
从 1.37_02 开始,install() 支持使用模式列表来过滤掉不应安装的文件。如果省略或未定义 $skip,则 install 将尝试从 CWD 中的 INSTALL.SKIP 读取列表。此文件是一个正则表达式列表,就像 ExtUtils::Manifest 使用的 MANIFEST.SKIP 文件一样。
可以通过设置环境变量 EU_INSTALL_SITE_SKIPFILE 来提供默认站点 INSTALL.SKIP,仅当没有特定于分发的 INSTALL.SKIP 时才使用此变量。如果环境变量 EU_INSTALL_IGNORE_SKIP 为真,则不会执行任何安装文件过滤。
如果 $skip 未定义,则将自动检测并使用跳过文件(如果找到)。如果 $skip 是对数组的引用,则假定数组包含模式列表,如果 $skip 是一个真正的非引用,则假定它是包含模式列表的文件名,$skip 的任何其他值都表示不应进行安装过滤。
1.47 版中的更改
从 1.47 版开始,对安装界面进行了以下添加。请注意,建议使用新的参数样式和 %result 哈希。
当 $always_copy 参数为 true 时,无论文件是否已更改,都会更新文件;如果参数已定义但为 false,则仅在文件已更改时才进行复制;如果参数未定义,则使用环境变量 EU_INSTALL_ALWAYS_COPY 的值作为默认值。
%result 哈希将填充各种键/子哈希,反映安装情况。目前,这些键及其结构为
install => { $target => $source },
install_fail => { $target => $source },
install_unchanged => { $target => $source },
install_filtered => { $source => $pattern },
uninstall => { $uninstalled => $source },
uninstall_fail => { $uninstalled => $source },
其中 $source
是正在安装的文件的文件规范。$target
是安装目标,$uninstalled
是 @INC
或 $ENV{PERL5LIB}
或其他标准位置中的任何影子文件,$pattern
是导致跳过源文件的文件模式。未来将添加更多键,例如显示创建的目录,但这需要更改其他模块,因此必须等待。
如果出现错误,将在引发任何异常之前填充这些键。
请注意,%result 的所有更新都是累加的,哈希在使用前不会被清除,因此可以轻松地汇总许多安装的状态结果。
新参数样式
如果只有一个参数,并且它是对数组的引用,则假定该数组包含指定选项的键值对列表。在这种情况下,选项“from_to”是必需的。这种样式意味着您不必提供一个神秘的参数列表,并且可以使用更容易理解的自文档化参数列表。
现在这是 install() 的推荐接口。
返回
如果所有操作都成功,install 将返回一个哈希引用,其中包含如上文 $result 参数所述的结果。如果任何操作失败,install 将终止,因此建议传入 $result 参数,而不是使用返回值。如果提供了 result 参数,则返回的哈希引用将是传入的哈希引用。
不推荐
install_default();
install_default($fullext);
使用参数调用 install(),将模块从 blib/ 复制到默认站点安装位置。
$fullext 是转换为目录的模块名称(例如,Foo::Bar 将为 Foo/Bar)。如果未指定 $fullext,它将尝试从 @ARGV 中读取它。
这主要对安装脚本有用。
注意此函数实际上并不有用,因为它具有硬编码的安装位置,无法控制站点与核心与供应商目录,并且给出了模块名称的奇怪方式。请考虑不使用它。
uninstall($packlist_file);
uninstall($packlist_file, $verbose, $dont_execute);
删除 $packlist_file 中列出的文件。
如果 $verbose 为 true,将打印出删除的每个文件。默认值为 false。
如果 $dont_execute 为 true,它将仅打印它将要执行的操作,而不会实际执行。默认值为 false。
pm_to_blib(\%from_to);
pm_to_blib(\%from_to, $autosplit_dir);
pm_to_blib(\%from_to, $autosplit_dir, $filter_cmd);
高效地将 %from_to 的每个键复制到其对应值。如果提供了 $autosplit_dir,所有 .pm 文件都将自动拆分到其中。将创建任何目标目录。
$filter_cmd 是一个可选的 shell 命令,用于在拆分和复制之前运行每个 .pm 文件。输入是模块的内容,输出是新模块的内容。
您可以设置一个环境变量 PERL_INSTALL_ROOT,它将作为目录添加到每个已安装文件(和目录)之前。
默认情况下会生成详细输出,设置 PERL_INSTALL_QUIET 环境变量将使此输出静默。
将添加到每个安装路径之前。
将阻止自动使用 INSTALL.SKIP 作为安装跳过文件。
如果 make 目录中没有 INSTALL.SKIP 文件,则可以使用此值提供默认值。
如果此环境变量为真,则在安装过程中,正常的安装过程将始终覆盖旧的相同文件。
请注意,如果未定义 EU_INSTALL_ALWAYS_COPY,则别名 EU_ALWAYS_COPY 将受支持,直到至少 1.50 版本。请确保使用正确的 EU_INSTALL_ALWAYS_COPY。
原始作者已淹没在时间的迷雾中。可能与 Makemaker 相同。
当前由 demerphq yves at cpan.org
维护生产版本,Michael G. Schwern 做了大量更改。
通过 http://rt.cpan.org/ 发送错误报告。请将生成的 Makefile 与报告一起发送。
此程序是免费软件;您可以在与 Perl 本身相同的条款下重新分发或修改它。