【问题标题】:Best practice for using slightly modifying module from CPAN?从 CPAN 使用稍微修改模块的最佳实践?
【发布时间】:2011-01-11 22:30:02
【问题描述】:

我正在使用 DBI 和 DBD::SQLite,现在我想使用 SQLite 的 R*Tree 功能。由于默认情况下 DBD::SQLite 不编译此功能,因此我必须在 DBD::SQLite 的 Makefile.PL 中的 @CC_DEFINE 变量中添加一个 -DSQLITE_ENABLE_RTREE=1。如果我执行“perl Makefile.PL && make && make install”,一切都可以在我的机器上本地正常运行,但这最终需要可部署/可分发给最终用户。

遇到这种情况我该怎么办?我应该复制源代码、grep 源代码并创建 DBD::SQLite::WithRTree 吗?创建 DBD::SQLite 1.31.1 的私有版本(其中 1.31 是 DBD::SQLite 的当前版本)?也许完全是更好的方法?

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

【问题讨论】:

    标签: perl cpan


    【解决方案1】:

    我必须在 DBD::SQLite 的 Makefile.PL 中的 @CC_DEFINE 变量中添加一个“-DSQLITE_ENABLE_RTREE=1”

    你做错了,perl Makefile.PL DEFINE='-DSQLITE_ENABLE_RTREE=1' 有效。这记录在ExtUtils::MakeMaker 中。既然您知道这一点,一个涉及Distroprefs 的简单解决方案可能就会到位。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 并仔细记录您所做的更改
      【解决方案3】:

      你可以这样做:

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

      然后,CPAN 会将该 DEFINE 永久添加到所有 Makefile.PL 调用的前面。

      所以,它应该只是

      cpan DBD::SQLite
      

      你的 makefile 选项应该被塞进你的编译行

      【讨论】:

        猜你喜欢
        • 2018-05-10
        • 2017-10-23
        • 2019-10-29
        • 2016-10-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-22
        • 1970-01-01
        相关资源
        最近更新 更多