2011-01-11 60 views
10

我正在使用DBI和DBD :: SQLite,现在我想使用SQLite的R *树功能。由于默认情况下,此功能未由DBD :: SQLite编译,所以我必须将-DSQLITE_ENABLE_RTREE=1添加到DBD :: SQLite的Makefile.PL中的@CC_DEFINE变量中。如果我做'perl Makefile.PL & & make & & make install',在我的机器上一切工作正常,但最终需要可部署/分发给最终用户。从CPAN使用稍微修改模块的最佳做法?

在这种情况下应该怎么做?我应该复制源代码,grep源代码,并创建一个DBD :: SQLite :: WithRTree?创建一个私人版本的DBD :: SQLite 1.31.1(其中1.31是DBD :: SQLite的当前版本)?也许更好的方法呢?

项目中的所有其他发行版都通过非公开的CPAN :: Mini镜像+ CPAN :: Mini :: Inject进行部署/分发。

回答

11

我必须在DBD :: SQLite的的Makefile.PL

你这样做不对,perl Makefile.PL DEFINE='-DSQLITE_ENABLE_RTREE=1'作品增添了 '-DSQLITE_ENABLE_RTREE = 1' 到@CC_DEFINE变量。这在ExtUtils::MakeMaker中有记录。现在您知道了,涉及Distroprefs的简单解决方案很可能会落实到位。

3

对于类似的问题,我已经将修改后的发行版安装在单独的目录中(不更改任何模块名称),并且使用use lib qw(the/special/directory)或设置$PERL5LIB用于需要使用增强模块的脚本。

调整模块的名称也可以完成这项工作,但这听起来像是需要做更多的工作来进行测试。

+1

守信的你改变什么认真记录 – justintime 2011-01-12 01:55:14

0

你可以这样做:那么

cpan 
o conf makepl_arg "DEFINE='-DSQLITE_ENABLE_RTREE=1'" 
o conf commit 

CPAN将永久添加定义到所有Makefile.PL调用前面。

所以,应该只是

cpan DBD::SQLite 

而且你的Makefile选项应该滚蛋,你上线编译