perl 模块安装的 make 和 nmake 比较

Posted

技术标签:

【中文标题】perl 模块安装的 make 和 nmake 比较【英文标题】:Comparison of make and nmake for perl module installation 【发布时间】:2012-03-21 06:25:06 【问题描述】:

与 Windows 和 linux/Unix 操作系统相比,模块安装有所不同。

在Win32中我们需要使用一个叫做nmake的程序,然后我们跟着

 1. C:\> perl Makefile.PL 
 2. C:\> nmake
 3. C:\> nmake test
 4. C:\> nmake install

在 Linux 中我们遵循

 1. $ perl Makefile.PL
 2. $ make
 3. $ make test
 4. $ make install

两种操作系统的安装过程相同,唯一的区别在于使用的关键字 ma​​kenmake。谁能告诉我字母 n 代表什么以及它在 windows 中的规范是什么。

【问题讨论】:

您使用 nmake、make 还是 dmake 取决于设置,即使在 Windows 中也是如此。 Strawberry Perl 的默认工具链包括 dmake。 nmake 通常包含在 ActiveState 发行版的工具链中,并且在 cygwin 下,我怀疑你会有“make”(尽管我没有使用 cygwin 来确认)。 ExtUtils::MakeMaker 通常会创建一个生成文件,该文件将适合常见的“make”实现的最小公分母,所以除非你真的很喜欢,否则你不必担心,除了担心用户是否真的有一些版本的make。 @DavidO,Cygwin 是一个 unix 仿真层,所以称它为 Windows 就像说 WINE 是 linux。 cygwin 提供 GNU 工具,所以它使用 GNU 的 make :) 我喜欢这个比喻,@ikegami。你是对的,当然。我只是为了避免平台实施方式的不确定性。 【参考方案1】:

来自Wikipedia,

Microsoft nmake,通常在 Windows 上可用。这是相当基本的 它仅提供其他两个版本的功能的子集 Make(BSD 和 GNU)。不要与微软的 nmake 混淆 来自 AT&T 和贝尔实验室的 Unix 的 nmake。

Microsoft nmake 详细 here 和 GNU make 详细 here

【讨论】:

【参考方案2】:

其实在windows和linux上,模块安装通常是这样进行的:

cpan Module::Name

关于你的问题。

Perl 期望用于构建模块的编译器套件与用于构建 Perl 的编译器套件相同。

Windows 上有两个主要的工具链。有一个微软提供的,还有一个 GNU 的移植版。

微软提供的make工具名为nmake。 GNU工具的MinGW端口提供的make工具命名为dmake

所以,

如果您的 Perl 是使用 MS 的工具构建的(例如 Windows 构建的 Perl by ActiveState),您需要使用nmake。 如果您的 Perl 是使用 GNU 的工具构建的(例如,Strawberry 构建的 Perl),您需要使用 dmake

这让我们回到cpan Module::Name

cpan 会询问 Perl 使用了哪些工具来构建它,并使用这些工具。

通常。在 Windows 上并非如此。 cpan 在 Windows 上实际上要灵活得多。 cpan 将首先查看用于构建 Perl 的工具链。如果没有找到,cpan 为您安装 GNU 工具链并暂时欺骗perl 使其相信它是使用 GNU 的工具链构建的。

这意味着你运行cpan Module::Name 它应该可以在ActivePerl 上运行。 (还有ppm install Module::Name,虽然我会先运行ppm,不带任何参数来添加存储库(例如贿赂))

【讨论】:

以上是关于perl 模块安装的 make 和 nmake 比较的主要内容,如果未能解决你的问题,请参考以下文章

寻找nmake和makefile结构的介绍[关闭]

windoes cmake与nmake

Linux中perl-DBI和DBI有啥区别?

将 nmake 转换为 make

GNU make 和 nmake:具有多个值的计算名称

nmake:批处理文件可以作为 make 命令块的一部分运行,影响 nmake.exe 进程的环境吗?