2011-08-11 72 views
2

我不想在Perl模塊的源代碼解壓縮目錄中添加或修改文件,而是希望將所有內容都構建在單獨的目錄中。使用ExtUtils::MakeMaker的相當標準的Makefile.PL可以輕鬆實現嗎? (簡單來說,我的意思是像一個或幾個命令行參數。)如果不是,其他任何構建系統是否都支持它?我可以使用基於ExtUtils :: MakeMaker的構建系統「構建出樹」來構建Perl模塊嗎?

更新/原因:的Perl模塊,是一個結合其構建系統autoconf/automake/libtool基於庫。 Perl模塊與這個庫一起發貨,並且在頂部目錄中調用make最終還會構建Perl庫。我有興趣在單獨的構建樹中構建整個項目。目前我做了類似於runrig建議的內容,只使用符號鏈接。 (cp -sru $(srcdir)/. $(builddir)/.)。迄今爲止,這個工作已經奏效,但如果有更優雅的解決方案,我想閱讀它。

+0

你爲什麼要這樣做?你解決什麼問題?我問,因爲答案是「是的,但建立和維護將會很痛苦」。 – Schwern

+0

我已更新我的問題。仍然對這個痛苦的解決方案感興趣。 :-) – hillu

回答

2

的MakeMaker已經拷貝的來源和建立他們在一個單獨的目錄(這是blib/是)。您可以使用INST_*參數集來控制構建位置WriteMakefile()。此示例將位置從blib/更改爲foo/

INST_ARCHLIB  => "foo/arch", 
INST_LIB   => "foo/lib", 
INST_BIN   => "foo/bin", 
INST_SCRIPT   => "foo/script", 
INST_MAN1DIR  => 'foo/man1', 
INST_MAN3DIR  => 'foo/man3', 

此外,您必須告訴MakeMaker清理新的編譯目錄。

clean  => { 
    FILES   => 'foo' 
}, 

看到ExtUtils::MakeMaker文檔的更多信息"Determination of Perl Library and Installation Locations"

1
cp -R Module-Directory-0.01 Module-Directory-0.01.copy 
cd Module-Directory-0.01.copy 
perl Makefile.PL 
make 
make test 
...etc. 
+0

如果我複製一切使用Makefiles的所有優點就會消失。 – hillu

+1

@hillu,這沒有任何意義。 – ikegami

+0

時間戳搞亂了,我用符號鏈接代替了(請參閱更新問題)。 – hillu

0

我最終使用符號鏈接:

到Perl的模塊提供綁定使用一個 autoconf/automake/libtool系構建系統的文庫。 Makefile.PL是從Makefile.PL.in通過configure生成的 。 Makefile.PL 生成Makefile-plMakefile已被 autoconf/automake拍攝)。

這是Makefile.am相關部分:

all: Makefile-pl src_deps 
    $(MAKE) -f Makefile-pl 

Makefile-pl: Makefile.PL 
    perl Makefile.PL INSTALLDIRS=$(INSTALLDIRS) PREFIX=$(prefix) 

我改變了第二個目標:

Makefile-pl: Makefile.PL 
    -[ $(srcdir) != $(builddir) ] && cp -rsu $(abs_srcdir)/. $(builddir)/. 
    perl Makefile.PL INSTALLDIRS=$(INSTALLDIRS) PREFIX=$(prefix) 

這應該工作,只要建設或安裝Perl模塊, 不會導致任何正在修改的文件。