如何处理perl的ExtUtils中的外部依赖项:MakeMaker

时间:2014-04-23 18:09:16

标签: perl makefile dependencies external

我有一系列perl脚本,我正在编写Makefile.PL脚本,但我对ExtUtils::MakeMaker缺乏经验。

我编写的一个脚本对命令行实用程序进行系统调用,必须安装该命令行实用程序才能使脚本正常运行。我的脚本可以优雅地检测到该实用程序丢失并发出有关安装它并将其放入用户路径的错误,但是在Makefile.PL脚本中是否有一些标准方法来处理它?如果我在Makefile.PL脚本中输入下载链接,它甚至可以 gasp 尝试安装第三方实用程序吗?

至少,我希望脚本在没有找到外部依赖项时警告用户。我知道我可以编写一个使用它的测试用例。这就像复制和粘贴我在脚本本身中编写的子程序一样简单,该子程序检查第三方实用程序并在未找到时打印错误或者是“错误的方法”吗?

2 个答案:

答案 0 :(得分:1)

为了论证,让我们调用这个外部依赖foobar

根据@ KeepCalmAndCarryOn的评论,首先考虑是否可以用CPAN(可能foobar)或几行Perl替换Foo::Bar

否则,最好的做法是:

  1. 创建名为Alien::Foobar的新CPAN分发。 Alien::Foobar的工作是下载,可能编译,然后安装foobar,作为Alien::Foobar的Makefile.PL或Build.PL的一部分。

    (存在一个名为Alien::Base的模块,旨在使这类事情变得更容易。它主要是为了安装库而不是二进制文件,尽管我使用它已经取得了一些成功对于后者。)

  2. 现在您最初处理的Makefile.PL可以声明对Alien::Foobar的依赖。

答案 1 :(得分:0)

如果您对命令行实用程序有外部依赖关系(即没有perl模块执行该实用程序所做的操作),则ExtUtils :: MakeMaker不会设计为处理此类依赖项。您需要做的是编写安装脚本或编辑make文件来处理依赖项。以下是这样做的注意事项:

  1. 检查依赖项是否存在以及版本是否足够。
  2. 下载相关包
  3. 配置,编译和&安装依赖包
  4. 测试以确保其正常工作
  5. 如有必要,请更新用户的环境设置
  6. 运行perl软件包的安装步骤(例如perl makefile.PL; make; sudo make install)
  7. 注意,您可能需要知道脚本是否以root身份运行,您可以使用id -u验证用户ID是否为root(即“0”)。