8

Perl で書かれた大規模なプロジェクトをセットアップしようとしています。IBM MakeMakerのチュートリアルはこれまでのところ非常に役に立ちましたが、すべてのモジュールをメイン プログラムにリンクする方法がわかりません。私のプロジェクト ルートには、、、、ディレクトリMANIFESTMakefile.PLおよびディレクトリがあります。ディレクトリには、メイン スクリプト ( ) があります。ディレクトリには、各モジュールがあり、それぞれのディレクトリに分割されています (つまり、ディレクトリ内など)。各モジュール ディレクトリには、テストを含むディレクトリもあります。READMEbinlibbinMain.pllibUtils::Util1Utils::Utils2utilst

私のMANIFESTファイルには次のものがあります:

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")]
);

作成して実行すると、プログラムがクラッシュし、 が見つからないと不平を言い、Utils::Util1実行すると 'make testと表示されますno tests defined。誰でも提案できますか?このような大規模なプロジェクトを perl で行ったことはありません。さらに多くのモジュールを追加する必要があります。

4

4 に答える 4

13

Perl モジュール (これは Perl のプロジェクトに相当するものでもあります) の作成を開始したばかりの場合は、Makemaker を使用しないでください。Module::Buildは進むべき道であり、現在では標準ライブラリの一部です。Makemaker は、まだ Module::Build に変換していない古いソルトのためのものです。:) Module::Buildは保守されておらず、支持されていないので、私はそれを打ちます。私は今でもメイクメーカーを使っています。

自分で構造を作ろうとして Perl プロジェクトを始めてはいけません。仕事が忙しすぎて、いつも何かを忘れてしまいます。

h2xs付属のプログラムで、.hファイルを Perl のグルー言語 XSperlに変換するためのツールであるはずでした。それは正常に動作しますが、その利点は次のものが付属していることです。perl

% h2xs -AXn Module::Name

Module::Starterのようなものは、CPAN から取得する必要がありますが、もう少し洗練されています。シンプルなため、 Intermediate Perlで使用するツールです。いくつかのテンプレートに情報を入力します。

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

これをかなり頻繁に行う場合は、それをDistribution::Cookerに変換して、ファイルとコンテンツをカスタマイズできるようにすることができます。これは私が自分用に作成した厄介なユーティリティなので、独自のテンプレートを使用できます。

% dist_cooker Module::Name

あなたが本当に筋金入りなら、Dist::Zillaが欲しいかもしれませんが、それは自分が何をしているかをすでに知っている人のためのものです。

于 2009-09-30T17:06:26.590 に答える
9

私も提案しmodule-starterますか?「Just Works」のスケルトン プロジェクトが自動的に作成されます。生成されたスケルトン ファイルを読むことで、Perl モジュールの編成について私がほとんど知らないことを学びました。それはすべて十分に文書化されており、より大きなプロジェクトを成長させるための基盤として非常に簡単に使用できます。入門ドキュメントをチェックして、何が得られるかを確認してください。

実行module-starterすると、多数のモジュールで構成される Perl ディストリビューションが提供されます (次の--moduleようなコマンド ライン オプションを使用します。

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

単一のディストリビューションで複数のモジュールを作成するため)。プロジェクトを、一緒に動作する多数のモジュールで構成される単一のディストリビューションとして編成するか、個別にリリースできるが相互に依存する多数のディストリビューションとして編成するか (BuildまたはMakefile.PLファイル) を使用して、完全なシステムを提供します。

于 2009-09-30T04:20:39.667 に答える
6

この構造を試してください:

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通常のスクリプトが使用するモジュールをインストールするために使用します。

makeと の間でスクリプトを実行する場合は、次のmake installようにします。

perl -Mblib bin/Main.pl

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

于 2009-09-30T04:04:40.193 に答える
2

デフォルトでは、テストは最上位の t ディレクトリ (または test.pl ファイルですが、これにはいくつかの制限があるため、避ける必要があります) で検索されます。

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

于 2009-09-30T03:38:03.517 に答える