2012-07-09 132 views
2

我使用ExtUtils :: MakeMaker来分发我的perl模块,它由一个PM文件和一个可执行文件组成。ExtUtils :: MakeMaker如何安装配置文件

可执行文件必须加载配置文件。

我希望我的Makefile.PL到:

  • 生成配置文件;
  • 将其安装在正确的PREFIX中;
  • 修改可执行文件以设置配置文件的实际路径。

但我不知道如何做到这一点。

+0

如果代码在没有配置文件的情况下运行,那么使您的代码回落到合理的默认行为。如果它所需要的信息不是以某种方式传递,而是要求它特定在文件中听起来讨厌,那么该工具可能会死亡。 – tripleee 2012-07-09 08:43:58

+0

配置文件仅存储setuid/setgid的用户/组,默认情况下,程序将其设置为nobody:nobody。无论如何,该程序必须加载配置文件,并且我不知道如何设置真正的路径(PREFIX/etc/...) – linkdd 2012-07-09 08:49:59

回答

3

这是制作者真正痛苦的地方。你必须知道如何在make中做到这一点。

首先,Makefile.PL只是一个Perl程序,所以你可以做任何你想做的事情。

其次,您可以使用一个.PL文件作为运行以生成真实文件的程序。例如,你可以有一个lib/Module.pm.PL。在构建时,系统运行该程序并使用输出创建blib/lib/Module.pm。请参阅PL_FILES的文档。

第三,您可以将任务添加到make目标,以便您的处理在正确的时间发生。双冒号目标添加到已定义的任务中。

all :: 
     perl create_config.pl > config.pl 
     install ... config.pl 

为了这个从Makefile.PL添加到的Makefile,你有特殊的子程序添加到MY命名空间。这些都记录在Makemaker中,但文档假定您对make感到满意。

但是,即使你知道如何去做,所有这些都是屁股疼痛。你认为你已经想通了,然后有人有不同的设置或不同种类的make。你花费你所有的时间在各个地方使其兼容。这是Perl神的发明Module::Build的主要原因之一。添加自定义处理和修改构建目标变得更加容易,您可以在Perl中完成所有这些工作,如!根据经验,如果您不知道如何使用Makemaker来做,那么可以使用Module::Build

+0

我使用Module :: Build,感谢你。这更容易。我现在可以将默认配置文件安装在正确的目录中。但我无法弄清楚如何在我的可执行文件中设置配置文件的真实路径。直接在Build.PL中进行修改?或者我必须定义一个PL_files? – linkdd 2012-07-11 09:40:06

+0

我解决了这个问题:在Build中。PL我创建了一个名为'config'的INI文件(这不是问题,因为我的模块需要Config :: IniFiles),并且在一个文件(设置在PL_files中)中,我从该INI文件获取值并正确生成脚本 – linkdd 2012-07-11 14:04:11