问题标签 [makemaker]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
400 浏览

perl - ExtUtils::MakeMaker 自定义目标

有没有办法让 ExtUtils::MakeMaker 生成自定义 Makefile 目标?比如说,我想做一些只有开发人员才感兴趣的特定事情,比如运行 pod 和回归测试;我可以为此使用环境变量,但是记住这样的事情有点笨拙。能够运行类似的东西make devtest将非常方便。

0 投票
2 回答
101 浏览

perl - perl MakeMaker 的 version_from 未被 prereq_pm 使用

编辑

为了让其他对此问题感到困惑的人受益,我已在此处添加了解释的前缀。正如@Ikegami 解释的那样,

  • VERSION_FROM指示发行版的版本来自哪里,如果不在顶级模块中;
  • PREREQ_PM指示(可选)每个所需模块的版本

一个带有版本号的发行版通常由几个模块组成,每个模块都有自己的版本号,与发行版的编号不同。

另一方面,由单个文件中的单个模块组成的发行版不需要利用VERSION_FROM.

但是,对于中间情况:

  • 应具有相同版本号的多个模块和程序的分布,以及
  • 有足够多的文件或程序,将版本号放入一个单独的文件是有利的

那么,下面描述的 hack 可能对您有用。

希望对某人有所帮助!

原始问题

实际上,我在 ExtUtils::MakeMaker 的 POD 中看到的第一件事是VERSION_FROM,这表明可以,甚至应该使用它。但是,即使 MakeMaker 本身也看不到先决条件的版本(用 列出PREREQ_PM),除非它位于顶级模块中。也就是说,如果我设置了另一个需要特定版本 Foo 的模块 Bar,其中 Foo 将其版本定义为 Foo.pm 以外的某个位置,MakeMaker 将报告 Foo 的版本为未知。

似乎是一个如此明显且长期存在的错误,让我想知道我是否只是误解或滥用它?

编辑问题是:为什么MakeMaker在不使用它来获取版本时鼓励VERSION_FROM?

编辑以下是一个可能有问题的解决方法,而不是主要问题:

OTOH,ExtUtils::MM_Unix 中检查版本的代码绝不会在任何地方VERSION_FROM显示。但是,它确实表明了一个有趣的解决方法。

如果模块 Foo 在 Makefile.PM 中有:

lib/Foo/Version.pm 显然有

然后在 Foo.pm 中输入:

一切正常......现在!

那么,这是 MakeMaker 中的一个错误吗?和/或我的解决方法是否合理(按照 Perl 标准)?

谢谢

0 投票
2 回答
130 浏览

perl - 如何使用“Makefile.PL”定义新的制作任务?

我希望我生成的 Makefile 有这些新的 linting 任务:

我尝试编写一个Makefile.PL,但是当我运行它时,生成的 Makefile 仍然缺少该lint任务。

我尝试阅读 CPAN 文档,但像大多数文档一样,它们提供的片段没有足够的上下文,所以我什至不确定是否应该在之前或之后声明 subs WriteMakefile

也发布在Reddit上。

0 投票
2 回答
528 浏览

c - 使用 Perl 的 ExtUtils::MakeMaker,如何使用与 XS 模块相同的设置来编译可执行文件?

给定一个使用 C 库的 Perl XS 模块,假设有一个正确设置的 Makefile.PL,以便所有头文件和库位置、编译器和链接器标志等都能正常工作。

现在,假设我想包含一个带有所述 XS 模块的小型 C 程序,该模块使用相同的底层 C 库。指定目标可执行文件以便使用相同的设置和标志构建它的正确、独立于平台的方法是什么?

如果我执行以下操作

我没有得到我在参数中设置的包括位置、库列表等WriteMakefile。如果我开始手动编写规则,我必须至少考虑makedmakenmake如果使用ExtUtils::CBuilder,我想不出一种直接的方法来指定要链接的库。

我肯定错过了什么。如果您能指出来,我将不胜感激。

0 投票
1 回答
93 浏览

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

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

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

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

这适用于 Module::Build,但 ExtUtils::MakeMaker 看不到 mite 文件。libMakeMaker 对运行时的内容列表进行硬编码Makefile.PL。然后,该pm_to_lib步骤无法将生成的文件复制到blib可以make test看到它们的位置。

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

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

你跑perl Makefile.PL,然后make。该make步骤已修改为.mite.pm为每个文件生成一个额外的.pm文件。在这make一步之后,我想要的是这个。

引入的所有新文件lib都已复制到blib/lib它们可以被视为make test. 我得到的是这个。

那是因为Makefile是通过Makefile.PL硬编码列表生成的lib

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

0 投票
1 回答
72 浏览

perl - 是否可以在 VERSION_FROM 选项(Makefile.PL)中设置跨模块版本?

我想在一个地方为几个项目设置相同的版本。我试过了:

在“lib/project/version.pm”中:

注意:AnotherProject 位于单独的目录中,但可以通过“使用 AnotherProject”加载。并包含'我们的 $VERSION="1.00" '。

是否可以从另一个模块传递(获取)版本字符串?

也许还有其他方法可以做到这一点,请支持我。

0 投票
0 回答
206 浏览

perl - 是否有用于 cmake 项目的类似 MakeMaker 的 Perl 库?

我一直在摆弄一个使用 MySQL 的 C++ 代码作为库的 Perl 项目。它使用名为 MakeMaker 的 Perl 库生成依赖于 MySQL 源的 G++ 兼容 Makefile。

以下代码是用于生成 Makefile(Github 上的源文件)的 Perl 代码:

我现在想让这个项目发展并使用 MariaDB 而不是 MySQL。然而 MariaDB 是使用 cmake 编译的,而不是 g++。因此,我不能再将 MakeMaker 用于 MariaDB。我想知道是否有类似的工具可用于使用 cmake 编译的源代码。如果存在这种情况,另一种选择是以另一种方式将 Perl 项目链接到 MySQL 源代码。

编辑:到目前为止,我还没有尝试过任何东西,因为我不知道 Perl 中是否存在这样的工具(我在 Web 上没有找到它的任何踪迹,但我可能没有正确的关键字)。如果没有,我怎样才能实现我最初的目标,即在 Perl 或 C++ 代码中使用 MariaDB 源代码,就像使用 MySQL 和之前的代码一样?

0 投票
1 回答
78 浏览

perl - 带有子模块的 perl MakeMaker makefile

我创建了一个带有 3 个子模块的 perl 模块。我想用 MakeMaker 创建一个 makefile,但遇到了问题。

我的模块结构是 /module.pm 和 /module/sub.pm。

如果我创建生成文件,则仅包含 module.pm 文件。我需要在 makemaker 中写入哪个参数以便子模块也包含在内?

非常感谢。

0 投票
0 回答
32 浏览

perl - ExtUtils::MakeMaker中PMLIBPARENTDIRS的作用是什么?

Makefile.PL我们的一个项目有一个基于ExtUtils::MakeMaker的古老继承,其中包含以下内容:

PMLIBDIRS选项在文档(上面链接)中清楚地解释,但PMLIBPARENTDIRS没有记录,我可以找到。然而,它在源代码中被提及两次,但没有以任何功能性的方式(即在配置和文档中)。

在构建包时,注释掉该PMLIBPARENTDIRS选项不会立即产生任何明显的负面影响。

这个参数有什么作用?或者它已经过时了?

0 投票
1 回答
133 浏览

perl - 如何使用 perl MakeMaker 模块禁用 make 目标?

我正在使用 ExtUtils::MakeMaker 打包我的 perl 模块,但我不希望 makefile 将文件复制到系统上的任何位置。我需要禁用“安装”目标,而是告诉用户,当他键入“make install”时,这个makefile 只支持“make dist”。