perl – MakeMaker在`make`时更新其文件列表
我正在研究名为
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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |