windows – 如何将Module :: Build配置为NOT以只读方式安装文件
我遇到过一个场景,我在
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的自定义版本,但可能更容易实现单独的步骤. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Microsoft Office 365的安装
- 如何配置TopShelf以将服务作为ServiceAccount.NetworkServi
- .net – 是否有可能在类中具有版本无关的DLL引用?
- .net – 确定菜单项的放置位置是否有任何标准?
- windows – 为什么我的WINVER 4 .exe在W98SE下运行?
- windows-server-2012-r2 – Windows 8.1 Update / Server 2
- windows-server-2008 – Windows Server 2008在到达登录界面
- Azure存储帐户备份(表和Blob)
- 如何在Windows上安装64位Qt支持C 11?
- wpf – 如何将System.Windows.Media.Color对象序列化到sRGB
- 如何从viewmodel(Caliburn WPF)关闭对话窗口?
- windows-server-2008 – 远程桌面 – 到达的远程
- Windows – VBScript SendKeys CTRL LWIN TAB?
- windows – 如何使用本地管理员帐户覆盖组策略?
- 如何通过cmd最大化特定窗口?(窗口)
- 批处理文件 – Windows批处理语法 – 变量名称中
- windows – 警告:找不到条目符号nable-stdcall-
- windows – 如何提取此文件夹子目录中的所有存档
- active-directory – 使用’netdom’命令验证Cro
- 如果不是交互式的,Microsoft Access VBA的mySQL查