加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

windows – 如何将Module :: Build配置为NOT以只读方式安装文件

发布时间:2020-12-14 05:30:51 所属栏目:Windows 来源:网络整理
导读:我遇到过一个场景,我在 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.或者,(如你所说)只使用标准的Module :: Build并添加一个单独的步骤来标记之后可写的所有内容.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读