首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MakeMaker在‘`make`’时间更新其文件列表

MakeMaker在‘`make`’时间更新其文件列表
EN

Stack Overflow用户
提问于 2014-05-28 20:54:21
回答 1查看 102关注 0票数 5

我正在开发一个名为螨类的Perl模块。这是某种程度上的“编译器”。您使用类似于Moose的声明性OO语法编写Perl类。与其在每次执行类时将类放在一起,不如在构建时完成所有的工作。它生成一个额外的文件,其中包含用于访问器和继承等的Perl代码。

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

在开发过程中,在运行makeBuild时会运行mite编译器。所以,像make test./Build test这样的东西就能正常工作。这是通过对MakeMaker模块:构建使用特殊的shims来实现的。

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

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

UPDATE:下面是一个更清晰的例子。假设你有这样的项目。

代码语言:javascript
复制
Makefile.PL
lib/
    Foo.pm
    Bar.pm
    Foo/
        Thing.pm
t/
    foo.t
    bar.t

您运行perl Makefile.PL,然后运行make。对make步骤进行了修改,以便为每个.pm文件生成一个额外的.pm文件。在make步骤之后,我想要的是这个。

代码语言:javascript
复制
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的一部分。我得到的反而是这个。

代码语言:javascript
复制
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年,但没有修复这个问题。)

EN

回答 1

Stack Overflow用户

发布于 2014-06-20 01:15:00

最后,我添加了一个新的目标,并使pm_to_blib依赖于它。新目标只是将所有.pm文件从lib/移动到blib/lib/。裁员应该无关紧要。

我对这个解决方案不满意,但它似乎奏效了。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23921679

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档