如何启动新的Perl模块分发?

qoefvg9y  于 2022-11-15  发布在  Perl
关注(0)|答案(4)|浏览(124)

我正在尝试建立一个用Perl编写的大型项目。IBM MakeMaker tutorial到目前为止非常有用,但是我不知道如何将所有模块链接到主程序中。在我的项目根目录中,我有MANIFESTMakefile.PLREADMEbin目录和lib目录。在我的bin目录中,我有我的主脚本(Main.pl)。在lib目录中,我有我的每个模块,它们被划分到各自的目录中(即utils目录中的Utils::Util1Utils::Utils2,等等)。在每个模块目录中,还有一个t目录,包含测试
我的MANIFEST文件包含以下内容:

bin/Main.pl
lib/Utils/Util1.pm
lib/Utils/Util2.pm
lib/Utils/t/Utils1.t
lib/Utils/t/Utils2.t
Makefile.PL
MANIFEST
README

Makefile.PL为以下值:

use ExtUtils::MakeMaker;
WriteMakefile(
    'NAME'=>'Foo',
    'VERSION_FROM'=>'bin/Main.pl',
    'PREREQ_PM'=>{
    "XML::Simple"=> 2.18}, #The libraries that we need and their
                   #minimum version numbers
    'EXE_FILES' =>[("bin/Main.pl")]
);

在我制作并运行之后,程序崩溃了,抱怨它找不到Utils::Util1,当我运行' make test时,它显示no tests defined。有人能提供什么建议吗?我从来没有在Perl中做过这样的大规模项目,我需要添加更多的模块

mepcadol

mepcadol1#

如果您刚刚开始创建Perl模块(它也是Perl的项目等价物),不要使用Makemaker。Module::Build是一种可行的方法,它现在是标准库的一部分。Makemaker是为我们这些还没有转换到Module::Build的老家伙准备的。:)我现在要强调的是,Module::Build是未维护的,不受欢迎;我仍然使用MakeMaker。
你永远不应该在Perl项目开始的时候尝试自己创建结构。这工作量太大,而且你总是会忘记一些东西。
h2xsperl自带的一个程序,它被认为是一个将 .h 文件转换为Perl的粘合语言XS的工具,它运行得很好,但它的优势在于它是perl自带的:

% h2xs -AXn Module::Name

类似Module::Starter的东西更复杂一些,尽管你必须从CPAN获得它。它是我们在Intermediate Perl中使用的工具,因为它很简单。它用你的信息填充一些模板:

% module-starter --author=... --email=... --module=...

如果你经常这样做,你可以把它转换成Distribution::Cooker,这样你就可以自定义你的文件和内容了。这是我为自己写的一个小工具,这样我就可以使用我自己的模板了。

% dist_cooker Module::Name

如果你真的是铁杆,你可能会想要Dist::Zilla,但这是更多的人谁已经知道他们在做什么。

j13ufse2

j13ufse22#

我还可以推荐module-starter吗?它会自动创建一个“Just Works”的框架项目。通过阅读生成的框架文件,我学到了我对Perl模块组织的一点了解。它都有很好的文档记录,并且很容易用作在中增长更大项目的基础。您可以查看the getting-started docs,看看它给您带来了什么。
运行module-starter将为您提供一个Perl发行版,其中包含许多模块(使用命令行选项--module,例如:

module-starter --distro=Project --module=Project::Module::A,Project::Module::B [...]

在一个发行版中创建多个模块)。然后,您可以选择将项目组织为一个由多个模块组成的发行版,或者组织为多个可以单独发布但相互依赖的发行版(如BuildMakefile.PL文件中的配置),以提供一个完整的系统。

suzh9iv8

suzh9iv83#

尝试以下结构:

bin/Main.pl
lib/Utils/Util1.pm
lib/Utils/Util2.pm
Makefile.PL
MANIFEST
README
t/Utils1.t
t/Utils2.t

正如ysth所说,make不会安装您的模块,它只是在blib目录中构建它们。(在您的情况下,它只是将它们复制到那里,但如果您有XS代码,它将使用C编译器编译。)使用make install安装您的模块,以便常规脚本使用。
如果要在makemake install之间运行脚本,可以执行以下操作:

perl -Mblib bin/Main.pl

-Mblib命令perl临时将相应的目录添加到搜索路径中,这样您就可以尝试卸载的模块(make test会自动执行此操作)。

wrrgggsh

wrrgggsh4#

默认情况下,测试是在顶级t目录(或test.pl文件,但这有一些限制,所以应该避免)中查找的。
您可以说“在我制作并运行之后”...... make将内容放入一个准备安装的blib目录结构中,但并不做任何特殊的操作来使运行脚本访问它们。它确实添加了从blib到perl的@INC的适当路径以便能够运行测试。)您需要执行“make install”来将模块安装到脚本可以找到它们的位置(或者使用PAR之类的工具将它们与脚本打包在一起)。

相关问题