我正在开发一个名为螨类的Perl模块。这是某种程度上的“编译器”。您使用类似于Moose的声明性OO语法编写Perl类。与其在每次执行类时将类放在一起,不如在构建时完成所有的工作。它生成一个额外的文件,其中包含用于访问器和继承等的Perl代码。
这个额外的文件与您的其余代码一起放入lib,并随项目一起发布。因此,安装用户不需要安装Mite,代码加载速度更快。
在开发过程中,在运行make或Build时会运行mite编译器。所以,像make test和./Build test这样的东西就能正常工作。这是通过对MakeMaker或模块:构建使用特殊的shims来实现的。
这对于Module::Build很好,但是ExtUtils::MakeMaker没有看到螨文件。MakeMaker硬编码lib中运行Makefile.PL时的列表。然后,pm_to_lib步骤无法将生成的文件复制到blib中,make test将在其中看到它们。
我怎样才能最好地解决这个问题呢?我希望这个过程对开发人员保持透明(一旦他们加载了适当的shim),并且不需要安装用户的特殊依赖项。
UPDATE:下面是一个更清晰的例子。假设你有这样的项目。
Makefile.PL
lib/
Foo.pm
Bar.pm
Foo/
Thing.pm
t/
foo.t
bar.t您运行perl Makefile.PL,然后运行make。对make步骤进行了修改,以便为每个.pm文件生成一个额外的.pm文件。在make步骤之后,我想要的是这个。
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年,但没有修复这个问题。)
发布于 2014-06-20 01:15:00
最后,我添加了一个新的目标,并使pm_to_blib依赖于它。新目标只是将所有.pm文件从lib/移动到blib/lib/。裁员应该无关紧要。
我对这个解决方案不满意,但它似乎奏效了。
https://github.com/evalEmpire/Mite/commit/feff24e4d68e062a06a721591ff0d785c5dad80b
https://stackoverflow.com/questions/23921679
复制相似问题