gpt4 book ai didi

perl - MakeMaker 在 `make` 时间更新其文件列表

转载 作者:行者123 更新时间:2023-12-04 21:42:01 24 4
gpt4 key购买 nike

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

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

在开发过程中,mite 编译器在 make 时运行。或 Build正在运行。所以像 make test./Build test只是工作。这是通过对 MakeMaker 使用特殊垫片来完成的。或 Module::Build .

这适用于 Module::Build,但 ExtUtils::MakeMaker 看不到 mite 文件。 MakeMaker 对 lib 中的内容列表进行硬编码当Makefile.PL正在运行。 pm_to_lib然后步骤无法将生成的文件复制到 blib在哪里 make test会看到他们。

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

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

Makefile.PL
lib/
Foo.pm
Bar.pm
Foo/
Thing.pm
t/
foo.t
bar.t

你运行 perl Makefile.PL然后 make . make已修改步骤以生成额外的 .mite.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

那是因为 MakefileMakefile.PL 生成带有 lib 中内容的硬编码列表.

(这特别傻,我维护了 MakeMaker 10 年,没能解决这个问题。)

最佳答案

我最终添加了一个新目标并拥有 pm_to_blib依赖它。新目标只是移动所有.pm来自 lib/ 的文件至blib/lib/ .冗余应该无关紧要。

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

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

关于perl - MakeMaker 在 `make` 时间更新其文件列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23921679/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com