我写了一个bash命令,它使用了一个扩展的perl模块库。我知道我可以在usr/bin
中安装一个自定义的bash命令足够简单,但我以前从未有过命令的依赖关系。
我的makefile,不管是好是坏,看起来像这样
install:
cp program.pl /usr/bin/program -f -v
chmod +x /usr/bin/program -v
它很短,但我真的不需要编译任何东西。program.pl是一个简短的perl脚本,它使用Getopt::Long
与模块交互。我一直使用MakeMaker单独安装模块,如文档here所示。
我的文件结构感觉有点矫枉过正,因为命令应该是多么简单,但由于MakeMaker的工作方式,它最终像这样
program/
program.pl
makefile
perl/
Makefile.PL
MANIFEST
lib/
Program/
Package01.pm
Package02.pm
Package03.pm
而且,我没有在根目录中运行递归make,而是在两个地方都运行make,我知道这是不对的(同时也很烦人)。
我看到所有这些模块都在/usr/local/share/perl/5.34.0/Program
中结束,但我宁愿它更容易移植,而不是自己把它放在我的根makefile中。正确的方法是什么?我希望最终公开这个命令,我不想搞砸安装
2条答案
按热度按时间pkwftd7m1#
很可能你可以在添加所需库的路径时运行该命令。在顶层 Makefile 中,你可以运行:
还有其他各种方法可以设置Perl的库搜索路径。
诀窍可能是你的本地Perl模块需要其他模块,而这些模块在 Makefile.PL 中指定。你可以在local::lib的帮助下在本地安装这些模块:
这些是默认值,但您可以指定自己的基:
根据您的需要调整这些值,并将其放入您的环境中,
cpan
应该遵守它们:如果你不介意将依赖项安装在你的主目录而不是项目目录中,那么就不要设置任何env变量。
cpan
的-I
开关将为你使用local::lib
并创建和安装到~/perl5/lib
中:在你的程序中,拉入
local::lib
,它应该能解决这个问题:或者使用相对路径:
gdx19jrr2#
听起来像program.pl和Program::PackageXX.pm是一个捆绑包。
如果是这样,你应该安装Perl,不仅要安装模块,还要安装脚本。
Makefile.PL
:(App::...是这类东西的首选名称空间。)
然后,只需正常安装发行版。
这将把模块安装在由
它应该已经在你的PATH中了。如果没有,添加它。