2011-01-11 56 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選項應該滾蛋,你上線編譯