2011-08-11 5 views
2

Perlモジュールのソースがアンパックされているディレクトリでファイルを追加または変更する代わりに、すべてを別のディレクトリに構築したいと思います。これは、ExtUtils::MakeMakerを使用するかなり標準のMakefile.PLで簡単に達成できますか? (簡単に言うと、1つまたはいくつかのコマンドラインパラメータのようなものを意味する)いいえの場合、他のビルドシステムはこれをサポートしていますか?ExtUtils :: MakeMakerベースのビルドシステムを「ツリーの外」でPerlモジュールをビルドすることはできますか?

更新/理由:はPerlモジュールは、そのビルドシステムautoconf/automake/libtoolベースでライブラリへの結合です。 Perlモジュールはこのライブラリと一緒に出荷され、最上位ディレクトリにmakeを呼び出すと、最終的にPerlライブラリもビルドされます。私は別のビルドツリーでプロジェクト全体を構築することに興味があります。現時点では、私は輪ゴムが示唆したものに似た何かをしますが、シンボリックリンクを使うだけです。 (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

私がすべてをコピーすると、Makefileを使う利点がすべて失われます。 – 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) 

私は第二のターゲットを変更された:これは限り建物として働く又はもたらさない Perlモジュールをインストールする必要があり

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

任意のファイルがインプレースで変更されます。

関連する問題