wordpress   发布时间:2022-04-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了windows – 如何将Module :: Build配置为NOT以只读方式安装文件?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我遇到过一个场景,我在 Windows机器上构建一个Perl模块作为另一个Build系统的一部分.我使用Module :: Build的–install_base选项来指定放置模块文件的临时目录,直到整个构建系统可以使用它们.不幸的是,如果其依赖的任何文件是只读的,那么其他Build系统会出现问题 – 它会在重建之前尝试删除任何生成的文件,并且它无法清除任何只读文件(它会尝试删除它,它是只读的,这
我遇到过一个场景,我在 Windows机器上构建一个Perl模块作为另一个Build系统的一部分.我使用Module :: Build的–install_base选项来指定放置模块文件的临时目录,直到整个构建系统可以使用它们.不幸的是,如果其依赖的任何文件是只读的,那么其他Build系统会出现问题 – 它会在重建之前尝试删除任何生成文件,并且它无法清除任何只读文件(它会尝试删除它,它是只读的,这会产生错误.)认情况下,Module::Build会在启用只读位的情况下安装其库.

一种选择是在构建过程中创建一个新步骤,从已安装的文件删除只读位,但由于构建工具的性​​质,需要第二个临时目录……呃.

是否可以将基于Module :: Build的安装程序配置为在文件安装到–install_base目录时不启用该只读位?如果是这样,怎么样?

解决方法

不,这不是一个可配置的选项.它是在Module :: Build :: Base中的copy_if_modified方法中完成的:

# mode is read-only + (executable if source is executablE)
my $mode = oct(444) | ( $self->is_executable($filE) ? oct(111) : 0 );
chmod( $mode,$to_path );

如果您控制了Build.PL,则可以继承Module :: Build并覆盖copy_if_modified以调用基类,然后chmod该文件可写.但我得到的印象是你只是想安装别人的模块.

可能最简单的方法是在私有目录中安装Module :: Build的副本,然后编辑它以使用oct(666)(或任何你想要的模式).然后调用perl -I / path / to / customized / Module / Build Build.Pl.或者,(如你所说)@R_532_8749@的Module :: Build并添加一个单独的步骤来标记之后可写的所有内容.

更新:ysth是对的;这是ExtUtils::Install,实际上是最终副本. copy_if_modified用于填充blib.但是ExtUtils :: Install也将模式硬编码为只读模式.您可以使用ExtUtils :: Install的自定义版本,但可能更容易实现单独的步骤.

大佬总结

以上是大佬教程为你收集整理的windows – 如何将Module :: Build配置为NOT以只读方式安装文件?全部内容,希望文章能够帮你解决windows – 如何将Module :: Build配置为NOT以只读方式安装文件?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。