
Which framework should I use to write modules?编写模块的最佳框架是什么-ExtUtils :: MakeMaker(h2xs)或Module :: Build? 注意此建议已过时。 Module :: Build已从Perl核心中删除,但仍作为CPAN模块存在。优点和缺点仍然存在,而我对MakeMaker的看法仍然存在。 作为ExtUtils :: MakeMaker的前维护者,我喜欢推荐Module :: Build,因为MakeMaker令人震惊。 Module :: Build更好地组合在一起。但这不是您关心的问题,我将提出"给您带来的最小麻烦"的答案。 执行摘要: 因为在所有Perl中,Module :: Build的支持都不是100%,所以从MakeMaker开始。如果您要进行任何自定义,请切换到Module :: Build。由于它们的基本布局,选项和界面几乎相同,因此将很轻松。看起来很诱人,请避免使用Module :: Install。 幸运的是,Module :: Build可以模拟MakeMaker,这可以帮助一些人,但是如果您要进行任何自定义,则无济于事。参见Module :: Build :: Compat。 对于使用Module :: Build的CPAN版本,可以。现在,在CPAN上有足够的Module :: Build东西了,每个人都已经开始引导它了。 最后,新的 哦,无论做什么,都不要使用h2xs(除非您正在编写XS代码...甚至还要考虑一下)。 MakeMaker专业人士:
MakeMaker缺点:
模块::构建优点:
模块::构建缺点:
模块::安装优点:
模块::安装缺点:
这里有两个问题。 首先,切勿使用h2xs。尽管我实际上想将头文件转换为XS代码,但它已经过时了,但它可能很有用(我自己从未这样做过)。 2011年更新:我强烈建议您看一下Dist :: Zilla,尤其是如果您认为自己将维护多个模块。 要创建新模块,请使用Module :: Starter。它工作得很好,并且有一些不错的插件可用于自定义输出。 第二,您问您应该使用哪种构建系统。这三个竞争者是ExtUtils :: MakeMaker(EUMM),Module :: Build(MB)和Module :: Install(MI)。 EUMM是一件令人讨厌的工作,但是它可以工作,而且如果您根本不自定义构建过程,也可以正常工作。 MB是新来的孩子,它有它的缺点。最大的好处是,如果您想大量自定义安装和构建过程,则很有可能使用MB明智地(以跨平台方式)执行此操作。使用EUMM实际上是不可能的。 最后,MI基本上是EUMM之上的声明性包装器。它还与发行版一起打包,以解决用户尝试使用旧工具链模块安装模块的问题。" package self"技巧的缺点是,如果MI本身存在错误,则必须重新发布所有模块以进行修复。 就定制而言,有一些MI的插件,但是如果您不打算使用它们,则会回到处理Makefile和跨十二个平台构建工具的问题上,所以实际上不是将会在那个领域为您提供太多帮助。 我刚刚将Distribution :: Cooker上传到CPAN。这就是我用来制作新发行版的方式。这样做的好处是您的发行版可以随心所欲:您只是在烹饪一些模板。我不在乎是否有人使用它。对我来说,它简单,技术含量低,并且不会引起额外的问题。 您可以从Module :: Starter之类的东西开始,制作您的入门模板,然后添加自己的样板和最喜欢的做事方式。您不仅可以选择每个文件中想要的内容,还可以选择哪个文件显示在发行版中。当您确定自己喜欢做的??事情时,您只需更新自己的模板。 关于Makemaker和Module :: Build,未来是Module :: Build s>。只是我们这些使用Makemaker的老家伙了。 :)有几种方法可以同时使用(或假装同时使用)。 查看Module :: Build,Module :: Build :: Compat和Module :: Install文档 s>。 Module :: Build已从Perl的标准库中剔除,并且前途未卜。它作为构建系统返回到Makemaker。 尽管这是一个简单的答案,但尝试使用每种方法只是对每种方法都有一点经验。 您可能还想看看Dist-Zilla,这是一个仅用于作者的新工具,用于创建发行版。因为它仅有助于构建发行版,所以它不随代码提供或进行任何安装,因此可以完成很多强大的工作。 有关Module :: Build兼容性的唯一麻烦是,当用户尝试安装模块而不更新其CPAN客户端(CPAN.pm或CPANPLUS.pm)时,如果他们是从CPAN安装模块,则同样容易从同一镜像升级其客户端。 如果您不想在构建过程中做任何复杂的事情,请确保:使用EUMM。但是,如果您在其他目标平台上存在构建问题,则可能会最终进入Makefile,这在make的每个变体中都不同。 Module :: Build为您提供了许多功能(如果您对其进行扩展,可以想到的一切),并且都是perl的,因此您永远不会最终调试makefile。 Module :: Install提供了功能,但是您必须将其捆绑在一起,最终所有内容最终都通过'make'运行。 以下是我希望回复的方向的一些说明:
戴夫的答案有一些不错的专业知识。莱昂的答案暗示了兼容性,但并不明确。正如brian d foy所提到的,只有旧版本才使用EUMM,但是我不相信MB是用于CPAN的良好框架,因为它直到5.9才成为核心。 我个人建议使用Module :: Install,就像我认识的许多人一样-Catalyst和Moose的人也使用它。 Module :: Build在任何方面都比较好,但是与ExtUtils :: MakeMaker相比,它的支持范围不广(更具体地说,Perl的较早版本不开箱即用)。这取决于您的需求。 我还建议使用Module :: Build和Module :: Starter(带有TT2插件)。 两者都有优点和缺点。这些天,我使用并推荐Module :: Build和Module :: Starter。 EU :: MM似乎仍然是得到最广泛支持和最受欢迎的工具,但是Module :: Build正在赶上。另外,请查看Module :: Starter中可帮助您入门的模块。 |