【问题标题】:ExtUtils::MakeMaker how to install configuration fileExtUtils::MakeMaker如何安装配置文件
【发布时间】:2012-07-09 08:32:33
【问题描述】:

我正在使用 ExtUtils::MakeMaker 分发我的 perl 模块,该模块由一个 PM 文件和一个可执行文件组成。

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

我希望我的 Makefile.PL :

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

但我不知道该怎么做。

【问题讨论】:

  • 如果您的代码在没有配置文件的情况下运行,则使您的代码回退到合理的默认行为。如果它需要的信息没有以一种或另一种方式传递,那么该工具很可能会死掉,但要求它专门放在一个文件中听起来很讨厌。
  • 配置文件只存储一个 setuid/setgid 的用户/组,默认情况下程序会将其设置为nobody:nobody。反正程序要加载配置文件,不知道怎么设置真实路径(PREFIX/etc/...)

标签: perl


【解决方案1】:

这就是 Makemaker 真正痛苦的地方。您必须知道如何在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。

【讨论】:

  • 我正在使用 Module::Build,谢谢你。这要容易得多。我现在可以在正确的目录中安装默认配置文件。但我不知道如何在我的可执行文件中设置我的配置文件的真实路径。直接在 Build.PL 中进行修改?或者我必须定义一个 PL_files ?
  • 我解决了这个问题:在 Build.PL 中,我创建了一个名为“config”的 INI 文件(这不是问题,因为我的模块需要 Config::IniFiles),并在一个文件中(在 PL_files 中设置) ,我从该 INI 文件中获取值并正确生成脚本
猜你喜欢
  • 2019-04-05
  • 2011-08-18
  • 1970-01-01
  • 2014-03-10
  • 2018-01-14
  • 2010-10-12
  • 1970-01-01
  • 2017-12-19
  • 2015-05-09
相关资源
最近更新 更多