我有一系列perl脚本,我正在编写Makefile.PL
脚本,但我对ExtUtils::MakeMaker
缺乏经验。
我编写的一个脚本对命令行实用程序进行系统调用,必须安装该命令行实用程序才能使脚本正常运行。我的脚本可以优雅地检测到该实用程序丢失并发出有关安装它并将其放入用户路径的错误,但是在Makefile.PL脚本中是否有一些标准方法来处理它?如果我在Makefile.PL脚本中输入下载链接,它甚至可以 gasp 尝试安装第三方实用程序吗?
至少,我希望脚本在没有找到外部依赖项时警告用户。我知道我可以编写一个使用它的测试用例。这就像复制和粘贴我在脚本本身中编写的子程序一样简单,该子程序检查第三方实用程序并在未找到时打印错误或者是“错误的方法”吗?
答案 0 :(得分:1)
为了论证,让我们调用这个外部依赖foobar
。
根据@ KeepCalmAndCarryOn的评论,首先考虑是否可以用CPAN(可能foobar
)或几行Perl替换Foo::Bar
。
否则,最好的做法是:
创建名为Alien::Foobar
的新CPAN分发。 Alien::Foobar
的工作是下载,可能编译,然后安装foobar
,作为Alien::Foobar
的Makefile.PL或Build.PL的一部分。
(存在一个名为Alien::Base
的模块,旨在使这类事情变得更容易。它主要是为了安装库而不是二进制文件,尽管我使用它已经取得了一些成功对于后者。)
Alien::Foobar
的依赖。答案 1 :(得分:0)
如果您对命令行实用程序有外部依赖关系(即没有perl模块执行该实用程序所做的操作),则ExtUtils :: MakeMaker不会设计为处理此类依赖项。您需要做的是编写安装脚本或编辑make文件来处理依赖项。以下是这样做的注意事项:
注意,您可能需要知道脚本是否以root身份运行,您可以使用id -u
验证用户ID是否为root(即“0”)。