2009-09-30 12 views
7

私はPerlで書かれたlarge-ishプロジェクトをセットアップしようとしています。 IBM MakeMaker tutorialはこれまでのところ非常に役に立ちましたが、すべてのモジュールをメインプログラムにリンクする方法はわかりません。私のプロジェクトルートには、MANIFEST,Makefile.PL,READMEbinディレクトリ、libというディレクトリがあります。私のbinディレクトリには、私のメインスクリプト(Main.pl)があります。 libディレクトリには、私自身のそれぞれのディレクトリ(すなわち、utilsディレクトリ内のUtils::Util1Utils::Utils2など)に分割されたそれぞれのモジュールがあります。新しいPerlモジュール配布を開始するにはどうすればよいですか?

bin/Main.pl 
lib/Utils/Util1.pm 
lib/Utils/Util2.pm 
lib/Utils/t/Utils1.t 
lib/Utils/t/Utils2.t 
Makefile.PL 
MANIFEST 
README 

Makefile.PLは以下の通りである:

use ExtUtils::MakeMaker; 
WriteMakefile(
    'NAME'=>'Foo', 
    'VERSION_FROM'=>'bin/Main.pl', 
    'PREREQ_PM'=>{ 
    "XML::Simple"=> 2.18}, #The libraries that we need and their 
        #minimum version numbers 
    'EXE_FILES' =>[("bin/Main.pl")] 
); 

私が作ると実行した後、各モジュールのディレクトリでは、tディレクトリはテスト

マイMANIFESTファイルには、以下を持っているを含む、もありますプログラムがクラッシュし、Utils::Util1が見つからないと訴え、make testを実行すると、​​と表示されます。誰でも提案をすることはできますか?私はこのような大規模なプロジェクトをperlでやったことがなく、もっと多くのモジュールを追加する必要があります

+1

"Utils :: Util1"と "Utils :: Util2"は単なる例の名前です。 – innaM

+0

これは単なる例の名前です。私はまだすべてのモジュールを書いたわけではありませんが、私は必要とするでしょうが、私は何かを構築することができたかったのです。 – Tim

答えて

5

は、このような構造をしてみてください。

bin/Main.pl 
lib/Utils/Util1.pm 
lib/Utils/Util2.pm 
Makefile.PL 
MANIFEST 
README 
t/Utils1.t 
t/Utils2.t 

ysthが言ったように、makeがあなたのモジュールをインストールしない、それだけでblibディレクトリにそれらを構築します。 (あなたの場合はコピーするだけですが、XSコードがあればCコンパイラでコンパイルされます)make installを使用して、通常のスクリプトを使用するためのモジュールをインストールします。

あなたはmakemake installの間でスクリプトを実行したい場合は、あなたが行うことができます:

perl -Mblib bin/Main.pl 

-Mblibあなたはアンインストールモジュールを試すことができますので、一時的に、検索パスに適切なディレクトリを追加するには、Perlを指示。 (make testは自動的にそれを行います)

2

デフォルトでは、テストはトップレベルのtディレクトリ(またはtest.plファイルですが、いくつかの制限がありますので、避けてください)。

あなたは「私が作って実行した後」と言う...インストールする準備ができているblibディレクトリ構造に物事を入れますが、スクリプトの実行に特別なことはしません。 (make testは特別なもので、blibからperlの@INCに適切なパスを追加してテストを実行できるようにします。)スクリプトを見つけるためにモジュールをインストールするには、 "make install"を行う必要があります。あなたのスクリプトと一緒にそれらをパッケージ化するPARのようなツール)。

9

module-starterもお勧めしますか?自動的に "Just Works"というスケルトンプロジェクトが作成されます。生成されたスケルトンファイルを読んでPerlモジュールの構成について知っていることはほとんど分かりませんでした。それはすべて文書化されており、より大きなプロジェクトを成長させるための基礎として非常に使いやすいものです。the getting-started docsをチェックして何が得られるかを調べることができます。module-starterを実行

は、モジュールの数(単一分布で複数のモジュールを作成するために

module-starter --distro=Project --module=Project::Module::A,Project::Module::B [...] 

など、コマンドラインオプション--moduleを使用)からなる、あなたのPerl配布を行います。それで、あなたのプロジェクトは、一緒に働いているいくつかのモジュールからなる単一のディストリビューションとして、あるいは別々にリリースすることができますが、お互いに依存するディストリビューションとして整理することを好みますか(あなたのBuildまたはMakefile.PLファイル)を使用して完全なシステムを提供します。

+0

ありがとうございます。私はそれを読んで、プロジェクトを行うことについて何も知りませんでした。モジュールを作成することについてのみ – Tim

+0

Tim:ディストリビューションとモジュールがPerlでどのように連携できるかを明確にするために答えを修正しました。それが役に立てば幸い?私たちの一人がまだ混乱している場合は、あなたの質問を修正してください。 – Gaurav

+0

これは本当に良いアイデアのように思えます。私は次のプロジェクトでそれを使わなければなりません。私はすでにマックメーカーのプロジェクトを立ち上げましたが、私の質問はあなたの最初の投稿よりもずっとよく答えています – Tim

13

Perlモジュール(Perlのプロジェクトに相当)を作成し始めたばかりの場合は、Makemakerを使用しないでください。 Module::Buildは道のりであり、標準ライブラリの一部になっています。 MakemakerはModule :: Buildにまだ変換されていない古い塩を私たちのために使用しています。 :)私はそれを打つつもりだModule::Buildは維持されていないと好意外です。私はまだMakeMakerを使用しています。

自分で構造を作成しようとすると、Perlプロジェクトを開始してはいけません。それはあまりにも多くの仕事で、あなたはいつも何かを忘れてしまいます。

h2xsperlが付属していますし、Perlの糊言語XSに .hファイルに変換するためのツールになっていたプログラムがあります。それが正常に動作しますが、その利点は、それがperlに付属しているということです:あなたはCPANからそれを取得する必要がありますが、Module::Starterよう

% h2xs -AXn Module::Name 

何かが、もう少し洗練されています。単純なので、Intermediate Perlで使用するツールです。それはあなたの情報といくつかのテンプレートを埋め:

% module-starter --author=... --email=... --module=... 

あなたは、この非常にビットを行うために行っている場合は、あなたがそのように、あなたのファイルやコンテンツをカスタマイズすることができDistribution::Cookerにそれを変換することがあります。それは私自身のために書いたdinkyユーティリティなので、自分のテンプレートを使うことができます。

% dist_cooker Module::Name 

あなたは本当にハードコアしている場合は、Dist::Zillaをしたいかもしれませんが、それはすでに、彼らが何をしているか知っている人のためのより多くのです。

関連する問題