您正在从Perl 5.20.0查看此文档的版本。查看最新版本
Module::Build-构建并安装Perl模块
构建和安装模块的标准流程:
perl内部版本。损益./内部版本./构建测试./Build安装
或者,如果您所在的平台(如DOS或Windows)不需要“./”符号,您可以这样做:
perl内部版本。损益生成生成测试生成-安装
模块::生成
是用于构建、测试和安装Perl模块的系统。它旨在成为外部工具::MakeMaker
。与使用MakeMaker公司
。它也不需要制作
在您的系统上-大多数模块::生成
代码是pure-perl的,并且是以跨平台的方式编写的。
请参见“动机”更多比较外部工具::MakeMaker
和模块::生成
.
要安装模块::生成
,以及使用的任何其他模块模块::生成
对于其安装过程,请执行以下操作:
perl构建。PL#“构建”。PL脚本创建“构建”脚本./Build#需要。/确保我们使用这个“构建”脚本./Build test#而不是恰好位于PATH中的另一个测试./Build安装
这说明了初始配置和三个“操作”的运行。在这种情况下,运行的操作是“build”(默认操作)、“test”和“install”。迄今为止定义的其他操作包括:
生成清单清除manifest_skip代码手册页配置数据助理差异ppd分布式ppmdistdistcheck预请求数据distclean预请求报告distdir pure_install蒸馏装置realclean离散复测设计滑雪检查距离测试docs测试fakeinstall测试盖帮助testdbhtml测试pod安装testpodcoverageinstalldeps版本安装
您可以运行“help”操作以获得完整的操作列表。
#文件编制指南
以下文件模块::生成
分为几个部分:
- #一般用法(模块::生成)
-
这是您当前正在阅读的文档。它描述了基本用法和背景信息。它的主要目的是帮助想要学习如何调用和控制的用户模块::生成
命令行中的脚本。
- #创作参考(模块::Build::创作)
-
本文件描述了模块::生成
以及写作作者所需的相关概念生成。损益分发或控制的脚本模块::生成
以编程方式处理。
- #API参考(模块::内部版本::API)
-
这是对模块::生成
应用程序编程接口。
- #食谱(模块::构建::食谱)
-
本文档演示了如何完成许多常见任务。它涵盖了一般命令行用法和创作生成。损益脚本。包括工作示例。
这里有一些通用原则。首先,构建模块时的每个任务都被称为“动作”。以上列出了这些措施;它们对应于构建、测试、安装、打包等任务。
其次,论点是以一种非常系统的方式处理的。参数总是键=值对。可在以下位置指定perl内部版本。损益
时间(即。perl内部版本。PL destdir=/my/secret/place
),在这种情况下,它们的值将在生成
脚本。在执行特定操作(即。生成测试详细信息=1
),在这种情况下,它们的值仅在该命令的生存期内有效。操作命令行参数优先于在中指定的参数perl内部版本。损益
时间。
构建过程还严重依赖于配置.pm
模块。如果用户希望覆盖配置.pm
,她可以这样指定:
perl内部版本。PL--配置cc=gcc--配置ld=gcc
默认情况下提供以下生成操作。
- #建造
-
[版本0.01]
如果您运行生成
脚本没有任何参数,它运行建造
动作,它反过来运行代码
和文档
行动。
这类似于MakeMaker公司
制造所有目标。
- #清洁的
-
[版本0.01]
此操作将清除生成过程可能创建的所有文件,包括气泡/
目录(但不包括_建造/
目录和生成
脚本本身)。
- #代码
-
[版本0.20]
此操作将构建代码库。
默认情况下,它只创建一个光点/
目录并复制任何下午点
和.吊舱
来自您的图书馆/
目录中的气泡/
目录。它还编译任何.xs文件
文件来自图书馆/
然后把它们放进去气泡/
当然,您需要一个可以正常工作的C编译器(可能与构建perl本身的编译器相同)才能使编译正常工作。
这个代码
操作还运行任何.PL
中的文件图书馆/目录。通常,这些文件会创建其他文件,命名相同,但没有.损益
结束。例如,一个文件图书馆/Foo/Bar.pm.PL可以创建文件lib/Foo/Bar.pm(库/Foo/Bar). The.损益
首先处理文件,因此下午点
文件(或我们处理的其他类型)将被正确复制。
- #配置数据
-
[版本0.26]
...
- #差异
-
[版本0.14]
此操作将比较即将安装的文件及其已安装的对应文件。对于.pm和.pod文件,将显示一个diff(目前需要在PATH中有一个“diff”程序)。对于其他文件,如编译的二进制文件,我们只报告它们是否不同。
A类旗帜
参数可以传递给动作,动作将传递给diff程序。请参阅您的“diff”文档以了解它将接受的参数-一个好的参数是-单位
:
./Build diff标志=-u
- #距离
-
[版本0.02]
此操作对于那些希望通过CPAN等介质打包模块进行源代码分发的模块作者很有帮助。它将创建中列出的文件的tarball显示并使用GZIP压缩压缩tarball。
默认情况下,此操作将使用存档::Tar
模块。然而,您可以通过提供显式的焦油
(和可选gzip公司
)参数:
./Build dist--tar C:\to\tar.exe--gzip C:\to\zip.exe
- #分发检查
-
[版本0.05]
报告哪些文件位于生成目录中,但不在显示文件,反之亦然。(请参见显示详细信息。)
- #分布式清理
-
[版本0.05]
执行“realclean”操作,然后执行“distcheck”操作。
- #发行目录
-
[版本0.05]
创建名为$dist_name-$dist_version
(如果该目录已经存在,则首先将其删除),然后复制显示文件到该目录。此目录是从中创建分发tarball的目录。
- #蒸馏装置
-
[版本0.37]
执行“distdir”操作,然后切换到该目录并运行perl内部版本。损益
,然后是该目录中的“build”和“install”操作。使用PERL_MB_OPT或.模块构建设置应在子流程期间应用的选项
- #分布式元数据
-
[版本0.21]
创建META.yml公司描述分发的文件。
金属yml是包含各种位的文件元数据关于分布。元数据包括分发名称、版本、摘要、先决条件、许可证以及有关分发的各种其他数据。此文件创建为META.yml公司以简化的YAML格式。
META.yml公司文件也必须列在显示-否则,将发出警告。
的当前版本META.yml公司CPAN上的规范如下CPAN::元::规范.
- #分配
-
[版本0.16]
使用模块::签名
为您的分发创建SIGNATURE文件,并将SIGNATURE文件添加到分发的MANIFEST中。
- #距离测试
-
[版本0.05]
执行“distdir”操作,然后切换到该目录并运行perl内部版本。损益
,然后是该目录中的“build”和“test”操作。使用PERL_MB_OPT或.模块构建设置应在子流程期间应用的选项
- #文档
-
[版本0.20]
这将为以下任何可安装项目生成文档(例如Unix手册页和HTML文档)气泡/包含POD的。如果没有宾多克
或图书馆文献
定义的安装目标(如不支持Unix手册页的系统上的情况)不会对手册页执行任何操作。如果没有二进制html
或libhtml文件
已定义安装目标—不对HTML文档执行任何操作。
- #假装失速
-
[版本0.02]
这就像安装
行动,但它实际上什么也不会做,它只会报告它做了什么将如果你真的运行了安装
行动。
- #帮助
-
[版本0.03]
此操作只需打印出一条消息,该消息旨在帮助您使用构建过程。它还将向您显示可用构建操作的列表。
使用可选参数指定操作名称(例如。生成帮助测试
),“help”操作将向您显示可以为该操作找到的任何POD文档。
- #html格式
-
[版本0.26]
这将为以下任何二进制或库文件生成HTML文档光点/包含POD的。只有在可以根据中的值确定安装路径时,才会安装HTML文档配置.pm
。您还可以通过指定安装路径(_P)
的值二进制html
和/或libhtml文件
安装目标。
带有可选html_链接
参数设置为false值时,可以跳过搜索要链接到的其他文档,因为如果无论如何都没有要生成的链接,那么这可能会浪费大量时间:
./Build html--html_links 0
- #安装
-
[版本0.01]
此操作将使用ExtUtils::安装
从安装文件气泡/
进入系统。请参见“安装路径”有关Module::Build如何确定安装位置以及如何影响此过程的详细信息。
如果您希望在中查看安装过程@INC公司
对于正在安装并尝试删除的其他版本的内容,可以使用未列入名单的
参数,它告诉ExtUtils::安装
为此:
./Build安装uninst=1
这可能是一个好主意,因为它有助于防止一个模块的多个版本出现在您的系统上,这确实是一种令人困惑的情况。
- #安装程序
-
[版本0.36]
此操作将使用cpan_客户端
参数作为命令来安装缺少的先决条件。系统将提示您是否安装可选依赖项。
这个cpan_客户端
选项默认为“cpan”,但可以设置为选项或.modulebuildrc模块。它必须是一个shell命令,以模块列表作为参数进行安装(例如,CPANPLUS的“cpanp-i”)。如果程序部分是相对路径(例如“cpan”或“cpanp”),那么它将相对于执行Build的perl程序进行定位。波兰。
/opt/perl/5.8.9/bin/perl构建。损益./Build installdeps--cpan_client“cpanp-i”#安装至5.8.9
- #显示
-
[版本0.05]
这是一个供模块作者使用的操作,而不是供模块安装人员使用的操作。它将带来显示分发中当前存在的文件的最新信息。您可以使用显示。跳过文件以从中排除某些文件或目录显示.显示。跳过应该包含一组正则表达式,每行一个。如果分发目录中的文件与任何正则表达式匹配,则它不会包含在显示.
以下是合理的显示。跳过首先,您可以添加自己的内容:
^_建造^生成$^气泡~$\.bak文件$^制造商。跳过$并行版本系统
请参阅分发检查和跳过检查如果您想了解显示
行动就行了,实际上什么都不做。
- #声明跳过
-
[版本0.3608]
这是一个供模块作者使用的操作,而不是供模块安装人员使用的操作。它将生成样板MANIFEST。如果文件不存在,请跳过该文件。
- #手册页
-
[版本0.28]
这将为下的任何二进制或库文件生成手册页气泡/包含POD的。只有在可以从中的值确定安装路径时,才会安装手册页配置.pm
。还可以通过在命令行上使用宾多克
和图书馆文献
安装目标。
- #赦免者
-
[版本0.2806]
生成用于的PAR二进制分布标准或PAR::距离.
它要求您的系统上安装PAR::Dist模块(0.17及更高版本)。
- #第页
-
[版本0.20]
为您的发行版构建PPD文件。
此操作采用可选参数代码库
它在生成的PPD文件中用于指定分发的(通常是相对的)URL。默认情况下,此值是没有任何路径信息的分发名称。
例子:
./Build ppd—代码库“MSWin32-x86-多线程/Module-Build-0.21.tar.gz”
- #ppm列表
-
[版本0.23]
生成PPM二进制分发和PPD描述文件。此操作还调用购买力平价
操作,因此它可以接受相同的代码库
在该行动中描述的论点。
这使用与距离
对其输出进行tar和zip操作,以便您可以提供焦油
和/或gzip公司
影响结果的参数。
- #预需求数据
-
[版本0.32]
此操作打印出所有先决条件和所需版本的Perl数据结构。可以使用再次加载输出评估()
。这对于希望查询Build脚本以获取先决条件的外部工具很有用。
- #请求前报告
-
[版本0.28]
此操作打印出所有先决条件、所需版本和实际安装的版本的列表。这对于在构建之前检查系统配置或编译数据以发送错误报告时非常有用。
- #pure_安装
-
[版本0.28]
此操作与安装
行动。但在未来安装
开始写入文件$(INSTALLARCHLIB)/perllocal.pod,pure_安装
不会,这是他们之间唯一的区别。
- #真正的清洁
-
[版本0.01]
此操作与清洁的
操作,但也删除_建造
目录和生成
脚本。如果您运行真正清洁
操作,您实际上是在重新开始,因此您必须重新创建生成
再次编写脚本。
- #重新测试
-
[版本0.2806]
这就像测试
操作,但实际上并不首先构建发行版,也不添加气泡/加载路径,因此将根据以前发行版的已安装版本。这可以用于验证某个已安装的发行版是否仍然有效,或者查看发行版的新版本是否仍然通过旧的回归测试,等等。
- #跳过检查
-
[版本0.05]
报告由于中的条目而跳过的文件显示。跳过文件(请参见显示详细信息)
- #测试
-
[版本0.01]
这将使用测试::线束
或TAP::线束
运行任何回归测试并报告其结果。可以在标准位置定义测试:一个名为测试.pl
在顶级目录中,或以结尾的多个文件.t英寸
在一个t吨/
目录。
如果您希望测试“详细”,即显示测试执行的详细信息而不仅仅是摘要信息,请传递参数详细=1
.
如果要在perl调试器下运行测试,请传递参数调试器=1
.
如果要让Module::Build查找具有不同文件扩展名的测试文件,请传递测试文件文本
具有扩展数组的参数,例如[qw(.t.s.z)]
.
如果要由运行测试TAP::线束
,而不是测试::线束
,传递参数分接头_线束_ args
作为参数的数组引用传递给TAP::Harness构造函数。
此外,如果文件调用可视.pl
存在于顶级目录中,则此文件将作为Perl脚本执行,其输出将显示给用户。这是进行速度测试或其他不使用测试::线束
输出格式。
要覆盖要运行的测试的选择,可以通过测试文件(_F)
参数,其值是要运行的测试脚本的以空格分隔的列表。当您只想运行一个测试来查看是否已经消除了某个错误时,这在开发中尤其有用:
./Build test--测试文件t/something_failing。t吨
你也可以通过几个测试文件(_F)
单独的参数:
./Build test--test_files t/one.t--测试文件t/two。t吨
或使用地球仪()
-样式图案:
./构建测试--测试文件“t/01-*.t”
- #贝塞尔
-
[版本0.2807]
[注:“testall”操作和下面的代码片段当前处于alpha阶段,请参阅“http://www.nntp.perl.org/group/perl.module.build/2007/03/msg584.html”“中的”“]
运行测试
操作加上每个测试$类型
由键定义的操作测试类型
参数。
目前,您需要自己定义ACTION_test$type方法,并在test_types参数中枚举它们。
my$mb=模块::Build->子类(代码=>q(sub ACTION_testspecial{shift->generic_test(type=>“special”);}sub ACTION_testauthor{shift->generic_test(type=>'author');}))->新的(...测试类型=>{特殊=>'.st',author=>['.at','.pt'],},...
- #测试盖
-
[版本0.26]
运行测试
操作使用Devel::封面
,生成代码平均值报告,显示测试期间实际执行了代码的哪些部分。
将选项传递给Devel::封面
,设置$开发_覆盖_选项
环境变量:
DEVEL_COVER_OPTIONS=忽略,生成/构建测试封面
- #测试数据库
-
[版本0.05]
这是“test”操作的同义词调试器=1
参数。
- #测试舱
-
[版本0.25]
这将检查文档
行动和生产测试::线束
-样式输出。如果您是模块作者,则在创建新版本之前运行此命令很有用。
- #测试舱覆盖率
-
[版本0.28]
这将检查分布的吊舱覆盖范围并生成测试::线束
-样式输出。如果您是模块作者,则在创建新版本之前运行此命令很有用。
- #版本安装
-
[版本0.16]
**注:自仅限下午
是一个非常新的功能,因为我们最近也在这里添加了对它的支持,所以这个功能被认为是实验性的**
如果你有仅.pm
模块,则可以使用此操作将模块安装到特定于版本的库树中。这意味着您可以安装同一模块的多个版本,并使用
具体如下:
仅使用MyModule=>0.55;
覆盖中的默认安装库仅::config
,指定版本库
参数时运行生成。损益
脚本:
perl内部版本。PL—版本库/my/version/place/
要覆盖模块的安装版本,请指定版本
参数时运行生成。损益
脚本:
perl内部版本。PL--版本0.50
请参阅仅限下午
文档以获取有关特定版本安装的更多信息。
#命令行选项
在调用生成。损益
或生成脚本。有关特定于操作的其他选项的信息,请参阅相应操作的文档。
注意:有一些初步的选项支持,可以使用更熟悉的长选项样式。大多数选项前面可以加上--
长选项前缀,下划线更改为破折号(例如。--use-rc文件
). 此外,布尔选项的参数是可选的,布尔选项可以通过在其前面加上前缀来求反不
或没有-
(例如。--中篇小说
或--无病毒
).
- #安静的
-
抑制输出中的信息性消息。
- #冗长的
-
显示有关生成输出的额外信息。冗长的
将关闭安静的
- #cpan_客户端
-
设置cpan_客户端
命令用于安装程序
行动。请参见安装程序
了解更多详细信息。
- #使用_文件
-
加载~/.模块构建选项文件。可以将此选项设置为false,以防止加载自定义资源文件。
- #allow_mb_mismatch(允许_mb_不匹配)
-
禁止在启动时检查我们现在运行的Module::Build版本是否与构建分发时最初调用的版本相同(即生成。损益
脚本是首次运行的)。从0.3601开始,不匹配将导致警告而不是致命错误,因此此选项实际上只会抑制警告。
- #调试
-
将模块::生成调试信息打印到STDOUT,例如已执行的生成操作的跟踪。
#默认选项文件(.模块构建)
[版本0.28]
当Module::Build启动时,它将首先查找文件,$ENV{HOME}/.modulebuildrc。如果在那里找不到,它将在.模块构建环境变量引用的目录中的文件家庭驱动
+HOMEDIR公司
,用户档案
,APPDATA公司
,WINDIR公司
,系统$登录
。如果文件存在,则其中指定的选项将用作默认值,就像在命令行中键入的一样。可以通过在命令行上指定新值来覆盖默认值。
操作名必须位于行的开头,后跟任意数量的空白,然后是选项。选项与命令行上的选项相同。只要在每一行的开头有空格,就可以用任意数量的空格(包括换行符)来分隔它们。哈希标记之后的任何内容(#
)被视为注释,并在解析之前被剥离。如果多行以相同的操作名称开头,则这些行将合并为一组选项。
除了常规操作外,还有两种特殊的伪操作:密钥*
(星号)表示应应用于所有操作的任何全局选项,键“Build_PL”指定调用时要应用的选项perl内部版本。损益
.
*verbose=1#全局选项差异标志=-u安装--install_base/home/ken--安装路径html=/home/ken/docs/htmlinstalldeps--cpan_client“cpanp-i”
如果希望将资源文件定位在其他位置,可以设置环境变量模块构建DRC
到包含选项的文件的完整绝对路径。
#环境变量
- #模块构建DRC
-
[版本0.28]
如上所述,指定默认选项文件的备用位置。
- #性能_MB_OPT
-
[版本0.36]
应用于生成的命令行选项。PL或任何构建操作。字符串将按shell的方式进行拆分(例如空格),结果将预先添加到任何实际的命令行参数中。
#安装路径
[版本0.19]
调用Module::Build时建造
行动,它需要找出在哪里安装东西。简而言之,默认安装位置是根据配置.pm,可以使用安装路径(_P)
参数。安安装基础(_B)
参数允许您指定替代安装根,如/主页/foo、和目标目录
允许您指定一个临时安装目录,如/tmp/安装如果您想创建捆绑安装包。
在本机中,Module::Build为以下类型的可安装项提供默认安装位置:
- #图书馆
-
通常pure-Perl模块文件以下午点.
- #拱
-
“体系结构相关”模块文件,通常通过编译XS生成,内联,或类似代码。
- #脚本
-
用纯Perl编写的程序。为了提高重用性,尽可能地将这些代码缩小——尽可能地将代码放入模块中。
- #箱子
-
“架构相关”的可执行程序,即编译的C代码或其他代码。在perl发行版中很少看到这种情况,但这种情况确实发生了。
- #宾多克
-
中的内容文档脚本
和箱子
。通常由这些文件中的POD生成。在Unix下,这些是属于“man1”类别的手册页。
- #图书馆文献
-
中的内容文档图书馆
和拱
。这通常由中的POD生成下午点文件夹。在Unix下,这些是属于“man3”类别的手册页。
- #二进制html
-
这与结合蛋白
但适用于HTML文档。
- #libhtml文件
-
这与图书馆文献
但适用于HTML文档。
其他四个参数用于控制如何确定安装路径的各个方面:
- #安装目录
-
这些可安装内容的默认目的地来自系统中的条目配置.pm
。通过设置安装目录
参数如下:
“installdirs”设置为:核心站点供应商使用Config.pm中的以下默认值:lib=>installprivlib installsitelib install vendorlibarch=>installarchlib installsitearch installvendorarchscript=>installscript installsitescript installvendorscriptbin=>installbin安装站点bin安装供应商binbindoc=>installman1dir installsiteman1dir-installvendorman1dirlibdoc=>installman3dir安装站点man3dir安装供应商dorman3dirbinhtml=>installhtml1dir installsitehtml1dir installvendorhtml1dir[*]libhtml=>installhtml3dir installsitehtml3dir installvendorhtml3dir[*]*在某些操作系统(例如MSWin32)下,HTML文档的目的地是由C<Config.pm>条目C<installhtmldir>决定。
的默认值安装目录
是“站点”。如果您正在创建模块包的供应商分发版,您可能希望执行以下操作:
perl内部版本。PL—安装目录供应商
或
./Build安装--安装目录供应商
如果您正在安装perl本身包含的模块的更新版本(即“核心模块”),则可以设置安装目录
到“核心”以覆盖当前位置的模块。
(请注意,“script”行不同于MakeMaker公司
-不幸的是,中没有“installsitescript”或“installvendorscript”条目配置.pm
,所以我们使用“installsitebin”和“installvendorbin”条目来至少获得正确的一般位置。在未来,如果配置.pm
添加一些更合适的条目,我们将开始使用这些条目。)
- #安装路径(_P)
-
设置默认值后,可以覆盖它们。
在命令行上,显示如下:
perl内部版本。PL—安装路径lib=/foo/lib—安装通道arch=/fo/lib/arch
或者这样:
./Build安装--安装路径lib=/foo/lib--安装路径arch=/foo/lib/arch
- #安装基础(_B)
-
您还可以通过提供安装基础(_B)
参数指向系统上的目录。例如,如果您设置安装基础(_B)
在Linux系统上,将安装到“/home/ken”,如下所示:
lib=>/home/ken/lib/perl5arch=>/home/ken/lib/perl5/i386-linux脚本=>/home/ken/binbin=>/home/ken/binbindoc=>/home/ken/man/man1libdoc=>/home/ken/man/man3binhtml=>/home/ken/htmllibhtml=>/home/ken/html
请注意,这是不同的从如何MakeMaker公司
的前缀
参数有效。安装基础(_B)
只在指定的目录下提供默认布局,这可能与installdirs=站点
布局。
您指定的目录下的确切布局可能因系统而异-我们尝试在每个平台上执行“合理”的操作。
- #目标目录
-
如果您想先将所有内容安装到临时目录中(例如,如果您想创建一个包管理器喜欢的目录树每分钟转数
或dpkg(千磅/千克)
可以从中创建包),可以使用目标目录
参数:
perl内部版本。PL—目标目录/tmp/foo
或
./Build安装--目标目录/tmp/foo
这将有效地安装到“/tmp/foo/$sitelib”、“/tmp/foo/$sitearch”等,但它将使用文件::规范
以使路径名在您安装的任何平台上正确工作。
- #前缀
-
提供用于与兼容外部工具::MakeMaker
的PREFIX参数。前缀
当您希望Module::Build在同一位置安装模块、文档和脚本时,应使用外部工具::MakeMaker
的PREFIX机制。
以下是等效的。
perl内部版本。PL—前缀/tmp/fooperl生成文件。PL前缀=/tmp/foo
由于预诱导逻辑的复杂性,PREFIX在MakeMaker公司
随着时间的推移发生了微妙的变化。模块::Build的--前缀逻辑等效于中的prefix逻辑外部工具::MakeMaker
6.30.
的维护人员MakeMaker公司
了解PREFIX机制的问题,并在6.31版本中添加了INSTALL_BASE支持MakeMaker公司
2006年发布。
如果不需要保留与旧版本(6.31之前)的兼容性外部工具::MakeMaker
或者正在启动我们建议您使用的全新Perl安装安装基础(_B)
相反(和安装_底座
在里面外部工具::MakeMaker
). 请参见在Module::Build::Cookbook中的“安装位置与ExtUtils::MakeMaker相同”了解更多信息。
我想重新开始有几个原因,而不仅仅是解决我不喜欢的地方MakeMaker公司
:
我不喜欢MakeMaker公司
也就是说制作
应该参与构建过程。以下是我的理由:
- #+
-
当一个人安装Perl模块时,您可以假设他们的环境是什么?你能假设他们制作
? 没有,但您可以假设他们有一些版本的Perl。
- #+
-
当一个人为预期的发行版编写Perl模块时,您能假设他们知道如何构建Makefile,这样他们就可以定制自己的构建过程吗?不,但您可以假设他们知道Perl,并且可以通过这种方式进行定制。
多年来,这些问题一直是人们获得构建/安装过程来做他们想做的事情的障碍。
在MakeMaker公司
这使得定制其行为非常困难。例如,当使用MakeMaker公司
你知道的使用ExtUtils::MakeMaker
,但在中创建的对象写入生成文件()
实际上,它是动态创建的包名称的一部分,因此不能简单地创建子类外部工具::MakeMaker
。有一个解决方法车型年款
允许您覆盖某些MakeMaker公司
方法,但只有特定的显式预选(由MakeMaker公司
)方法可以被重写。此外,定制方法非常粗糙:您必须修改包含特定目标的Makefile文本的字符串。因为这些字符串没有文档记录,并且不能记录(根据平台、perl版本、MakeMaker公司
等),您不能保证您的修改会在其他人的机器上或升级后生效MakeMaker公司
或perl。
对以下内容进行重大更改是有风险的MakeMaker公司
,因为它做了很多事情,非常重要,而且通常有效。模块::生成
是一个完全独立的包,因此我可以随心所欲地处理它,而不必担心与的向后兼容性MakeMaker公司
.
最后,据说Perl是一种系统管理语言。Perl真的不能胜任构建和安装软件的任务吗?即使该软件是一堆下午点
只需要从一个位置复制到另一个位置的文件?我的感觉是,我们可以设计一个系统,以灵活、可扩展和友好的方式来实现这一点。或者尝试死亡。
#待办事项
当前依靠时间戳来确定派生文件是否过期的方法不太可能扩展得很好,因为它需要向后跟踪所有依赖项,因此在NFS上遇到了问题,而且通常很脆弱。如果可用,最好使用MD5签名或类似签名。请参见欺骗
例如。
-附加到perllocal.pod-添加“插件”功能
肯·威廉姆斯<kwilliams@cpan.org>
开发问题、错误报告和补丁应发送到Module-Build邮件列表,地址为<模块build@perl.org>.
Bug报告也欢迎访问<http://rt.cpan.org/NoAuth/Bugs.html?Dist=模块-构建>。
最新开发版本可从Git存储库中获取,网址为<https://github.com/Perl-Toolchain-Gang/Module-Build>
版权所有(c)2001-2006 Ken Williams。保留所有权利。
这个库是自由软件;您可以重新发布它和/或使用与Perl本身相同的条款对其进行修改。
#另请参阅
perl(1),模块::构建::食谱,模块::Build::创作,模块::内部版本::API,外部工具::MakeMaker
META.yml公司规范:CPAN::Meta::规范
http://www.dsmit.com/cons/
http://search.cpan.org/dist/PerlBuildSystem/