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

perl – MakeMaker在`make`时更新其文件列表

发布时间:2020-12-15 23:32:58 所属栏目:大数据 来源:网络整理
导读:我正在研究名为 Mite的Perl模块.它是一种“编译器”,各种各样.您使用类似Moose的声明性OO语法编写Perl类. Mite不是在每次执行时都将所有工作放在一起,而是在构建时完成这项工作.它会生成一个额外的文件,其中包含用于访问器和继承的Perl代码以及诸如此类的东
我正在研究名为 Mite的Perl模块.它是一种“编译器”,各种各样.您使用类似Moose的声明性OO语法编写Perl类. Mite不是在每次执行时都将所有工作放在一起,而是在构建时完成这项工作.它会生成一个额外的文件,其中包含用于访问器和继承的Perl代码以及诸如此类的东西.

这个额外的文件将与其余代码一起放入lib中,并随项目一起发布.因此,安装用户无需安装Mite,代码加载速度更快.

在开发期间,mite编译器在运行make或Build时运行.所以像make test和./Build测试这样的东西就可以了.这是通过使用MakeMaker或Module::Build的特殊垫片来实现的.

这适用于Module :: Build,但是ExtUtils :: MakeMaker没有看到mite文件. MakeMaker硬编码运行Makefile.PL时lib中的内容列表.然后pm_to_lib步骤无法将生成的文件复制到blib中,make test将在其中看到它们.

我怎样才能最好地解决这个问题?我希望该过程对开发人员保持透明(一旦他们加载了适当的垫片),并且不需要安装用户的特殊依赖关系.

更新:这是一个更清晰的例子.假设您有一个这样的项目.

Makefile.PL
lib/
    Foo.pm
    Bar.pm
    Foo/
        Thing.pm
t/
    foo.t
    bar.t

你运行perl Makefile.PL然后make. make步骤已被修改为每个.pm文件生成一个额外的.mite.pm文件.在制作步骤之后,我想要的是这个.

Makefile.PL
Makefile
lib/
    Foo.pm
    Foo.pm.mite.pm
    Bar.pm
    Bar.pm.mite.pm
    Foo/
        Thing.pm
        Thing.pm.mite.pm
blib/
    lib/
        Foo.pm
        Foo.pm.mite.pm
        Bar.pm
        Bar.pm.mite.pm
        Foo/
            Thing.pm
        Thing.pm.mite.pm
t/
    foo.t
    bar.t

引入lib的所有新文件都已复制到blib / lib中,可以将它们视为make test的一部分.我得到的是这个.

Makefile.PL
Makefile
lib/
    Foo.pm
    Foo.pm.mite.pm
    Bar.pm
    Bar.pm.mite.pm
    Foo/
        Thing.pm
        Thing.pm.mite.pm
blib/
    lib/
        Foo.pm
        Bar.pm
        Foo/
            Thing.pm
t/
    foo.t
    bar.t

这是因为Makefile是由Makefile.PL生成的,其中包含lib中的硬编码列表.

(这是特别愚蠢的,我维护MakeMaker 10年,但未能解决这个问题.)

解决方法

我最终添加了一个新目标并让pm_to_blib依赖它.新目标只是将所有.pm文件从lib /移动到blib / lib /.冗余无关紧要.

我对这个解决方案不满意,但似乎有效.

https://github.com/evalEmpire/Mite/commit/feff24e4d68e062a06a721591ff0d785c5dad80b

(编辑:李大同)

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

    推荐文章
      热点阅读