我正在努力使用Inline :: Module。问题是,当我尝试使用内联C代码安装我的perl模块时,make系统会生成带有内联模块的自动存根,这些模块应该编译内联C代码。虽然如果你运行make dist,它会用DynaLoader版本替换存根(在我看来这是正确的)。所以问题是当我运行make install时如何强制Inline :: Module生成DynaLoader存根?我错过了这一点吗?
我从一些开放的例子中获取了Makefile:
use 5.008001; use strict; use warnings; use utf8;
use lib 'inc';
use ExtUtils::MakeMaker;
use Inline::Module;
WriteMakefile(
NAME => 'Text::Levenshtein::Inline',
ABSTRACT => 'Levenshtein distance implement by Inline::C',
VERSION_FROM => 'lib/Text/Levenshtein/Inline.pm',
AUTHOR => 'tadegenban <tadegenban@gmail.com>',
LICENSE => 'perl',
MIN_PERL_VERSION => '5.008001',
test => { TESTS => 't/*.t' },
postamble => {
inline => {
module => 'Text::Levenshtein::Inline',
makestub => 1
},
},
);
以下是运行make install时生成的自动生成的存根:
use strict; use warnings;
package Text::Levenshtein::Inline::Inline;
use Inline::Module stub => 'v2';
1;
虽然如果我做了dist,它会用这个替换内联存根:
use strict; use warnings;
package Text::Levenshtein::Inline::Inline;
use base 'DynaLoader';
bootstrap Text::Levenshtein::Inline::Inline;
1;
这里的真正问题是,如果有人从Repo中检出s / w并且只是运行make install,那么每次用户在工作目录中运行它时,s / w都会尝试构建内联C代码。否则你将不得不提供一些解释,在结账后,有人必须运行make dist或make distdir并从那里运行make install。有点烦人......
答案 0 :(得分:0)
如果您阅读the tutorial,那么您会发现它的工作方式与此相同。而Perl工具链的设计方式,做你要求的事情是没有意义的。
考虑安装模块所涉及的步骤:
perl Makefile.PL # generates Makefile
make # compiles code to blib
make test # tests code in blib
make install # copies files from blib to installation dir
如果它按您的要求运行,make install
步骤将需要丢弃已构建和测试的代码,重建不同版本的代码(未经过测试)并安装。
从存储库构建的人员应该知道他们在做什么。您可以在README文件中添加关于此问题的注释。