ExtUtils::MakeMaker
8562 ワード
概要
ExtUtils::MakeMakerモジュールは、Makefileファイルを作成するためのモジュールです.
注意:すべてのモジュールは、CPANにプロジェクトでパブリッシュする必要があります.
構文
ExtUtils::MakeMakerモジュールを使用して、ターゲットプロジェクトのMakefileを作成します.PLファイル(Makefile.PLファイルの構造は後で説明します)は、次のコードセグメントのコマンドを使用してターゲットプロジェクトのインストールを完了します.
プロジェクト構造の説明
ターゲットプロジェクト(CPANにパブリッシュする必要があるプロジェクト)の基本構造は以下の通りです.
上記の基本構造は、各項目に必要ですが、次のコードセグメントに示すように、他にもオプションの構造があります.
Makefile.PL
Makefileを実行するとPLの場合、Makefileが生成されます.これがExtUtils::MakeMakerモジュールのすべてです.
akefile.PLは、ExtUtils::MakeMakerをロードし、WriteMakefile()関数を実行してMakefileを生成する簡単なプログラムです.次のコードセグメントは簡単なMakefileです.PLファイルの例:
ここでNAMEはターゲットプロジェクトの最上位ネーミングスペースです.VERSION_FROMは、パブリッシュするアイテム全体を含む$VERSION変数のファイルです.通常、トップモジュールと同じです.
MANIFEST
このファイルには、プロジェクトのパブリッシュ時に含まれるすべてのファイルがリストされています.次に、MANIFESTファイルの内容の例を示します.
MANIFESTファイルの内容は、ファイルパスに対する区切り記号がUnixで約定された
lib/
このディレクトリにターゲットアイテムのすべてを格納します.pm和.podファイル.ネーミングスペースによって異なるフォルダに分散されます.
t/
このディレクトリには、あなたのモジュールをテストするすべてのコードが格納されています.各テストファイルは.tエンディング.make testコマンドは、ここのすべてのテストを実行します.参加する場合、すべてのテストファイルはt/ディレクトリの下にあります.しかし、サブディレクトリを構築し、異なるテストファイルをそれぞれ異なるディレクトリの下に置くことで、テストファイルが多い場合に効率的に管理することができます.
make testコマンドを実行するときにターゲットプロジェクトt/ディレクトリのすべてのテストコードを実行できるようにするには、Makefile.PLファイルWriteMakeFileメソッドで呼び出された関数には、次のようなものが含まれます.
上のコードはt/ディレクトリの下のすべてを使用します.tファイルおよびt/ディレクトリのサブディレクトリの下のすべて.tファイルはmake testコマンドを実行するときに実行できます.もちろん、t/ディレクトリの下に保存されているテストファイルにより深いレベルのネストがある場合は、testパラメータオプションにより多くの内容を指定する必要があります.
ルール、すなわち
注意:テスト実行時の現在のディレクトリは、プロジェクトの最上位ターゲットです.
Changes
このファイルには、ターゲットアイテムの変更記録が記録されています.ファイルのフォーマットは比較的自由で、以下は参考になる例です.
README
ターゲットプロジェクトの簡単な説明は、ユーザーにどのような状況であなたのプロジェクトを使用できるか、およびこのプロジェクトを使用するいくつかの制限を紹介することです.CPANは自動的にこのファイルの内容をCPANユーザーに表示します.これは彼らが最初に見たあなたのプロジェクトに関する内容で、これらの内容に基づいてこのプロジェクトが彼らに適しているかどうかを判断します.
INSTALL
モジュールとすべての依存関係をインストールする方法については、次の情報を参照してください.このプロジェクトにインストールする必要がある依存モジュール を使用するこのプロジェクトが実行可能なPerlの最小バージョン このプロジェクトのオペレーティングシステムへの依存 MANIFEST.SKIP
このファイルにはmake manifestコマンドで使用される正規表現が記録されており、これらの正規表現に一致するすべてのファイルはmake manifestコマンドで生成されたMANIFESTファイルに含まれません.これらの正規表現は、プロジェクトで検索されたファイルパスごとにチェックされます.正規表現がファイルに一致しない場合、このファイルはMANIFESTファイルから除外されます.
WriteMakefileメソッド
WriteMakefileメソッドはこのモジュールから外部に導出された唯一のメソッドであり,このメソッドではExtUtils::MakeMakerモジュールのすべての機能を実現している.すべての機能はWriteMakefileメソッドのパラメータによって制御されます.
まず、WriteMakefileでサポートされているすべてのパラメータオプション:
WriteMakefileメソッドの共通パラメータオプションについて説明します.
ABSTRACT
プロジェクトの要約を指定し、プロジェクトの一言(単行)の説明をCPANにアップロードするとPPDドキュメントに追加されます.
ABSTRACT_FROM
モジュールファイルのPODから要約を抽出することを指定します.MakeMakerは、指定されたモジュールファイルのPODで正則
AUTHOR
著者の名前(および電子メールアドレス)を含む文字列配列.PPM(Perl Package Manager)用のCPAN Metaファイル(META.ymlまたはMETA.json)およびPPD(Perl Package Description)ファイル.
BUILD_REQUIRES
モジュール構築時に依存するパケットは、実行時に依存しません.このパラメータ値のタイプはhashrefであり、このhashrefではkeyが依存パケット名、valueが依存パケットのバージョン番号である.
CONFIGURE_REQUIRES
Makefileを実行します.PLファイル時に依存するパケットは,プロジェクト構築や実行時にこれらのパケットに依存しない.このパラメータ値のタイプはhashrefであり、このhashrefではkeyが依存パケット名、valueが依存パケットのバージョン番号である.
META_ADD
META_MERGE
プロジェクトの情報をCPANのメタデータに追加し、デフォルトのメタデータと同じキーワードMETA_を持っている場合ADDとMETA_MERGEの動作は異なります.META_ADDはデフォルト値を上書きし、META_MERGEはここの値をデフォルト値とマージします.
デフォルト値を上書きすると判断しない限り、META_を優先的に使用してください.MERGE.
注意:これらのデータはMETAの生成にのみ使用する.ymlとMETAjson、直接METAにされない.ymlとMETAjsonが使用します.
ここではCPAN Meta仕様1.4がデフォルトで使用されています.2.0バージョンを使用する場合は、meta-specキーを指定する必要があります.次のようになります.
PREREQ_FATAL
このオプションは、プロジェクトの実行時に依存しない場合にインストールを禁止するかどうかを示すブール値を指定します.値が真の場合、PREREQ_PMで指定したモジュールが満たされないと致命的なエラーが発生してインストールを終了します.
このパラメータを真に設定することは推奨されません.コード実行時に依存するパッケージが満たされているかどうかを確認するテスト(t/00 compile.t)を作成し、満たされていない場合はテスト実行時に詳細な注意を与えることができ、モジュールインストールツールはテスト中に与えられた情報に基づいて依存関係を自動的に解決します.
PL_FILES
MakeMakerは、このパラメータオプションで指定したperlファイルを構築時に実行します.デフォルトではトップディレクトリの名前は*です.PL(Makefile.PLおよびBuild.PLを除く)のどのファイルもPerlプログラムとして想定され、構築中にMakeMakerがこれらのプログラムを実行し、独自のbasenameをパラメータとして使用します.次のコードセグメントに示します.
PL_を通じてFILESパラメータオプションは、このデフォルトの動作を上書きするために独自のファイルのセットを指定します.PL_FILESはhashrefを受け入れ、キー名は実行するファイルであり、キー値はファイルを実行するときに入力される最初のパラメータである.
以上のような構成でbin/foobarが以下のように実行する.PL
異なるパラメータを使用して同じファイルを複数回実行する必要がある場合は、キー値としてデータ参照を使用できます.
この場合、プログラムはターゲットファイルごとに1回実行します.
PREREQ_PM
プロジェクトの実行時に依存するパッケージ.このパラメータ値のタイプはhashrefであり、このhashrefではkeyが依存パケット名、valueが依存パケットのバージョン番号である.指定したバージョン番号が0の場合は、すべてのバージョンが可能であることを示します.次に例を示します.
の最後の部分
しばらくはこれだけ書いておくと、私自身にとっては十分で、その後は実際の使用過程で徐々に完備されています.
a
use ExtUtils::MakeMaker;
WriteMakefile(
NAME => 'Your::Module',
VERSION_FROM => 'lib/Your/Module.pm'
);
ExtUtils::MakeMakerモジュールは、Makefileファイルを作成するためのモジュールです.
注意:すべてのモジュールは、CPANにプロジェクトでパブリッシュする必要があります.
構文
ExtUtils::MakeMakerモジュールを使用して、ターゲットプロジェクトのMakefileを作成します.PLファイル(Makefile.PLファイルの構造は後で説明します)は、次のコードセグメントのコマンドを使用してターゲットプロジェクトのインストールを完了します.
perl Makefile.PL
make
make test
make install
プロジェクト構造の説明
ターゲットプロジェクト(CPANにパブリッシュする必要があるプロジェクト)の基本構造は以下の通りです.
Makefile.PL
MANIFEST
lib/Your/Module.pm
上記の基本構造は、各項目に必要ですが、次のコードセグメントに示すように、他にもオプションの構造があります.
lib/Your/Other/Module.pm
t/some_test.t
t/some_other_test.t
Changes
README
INSTALL
MANIFEST.SKIP
bin/some_program
Makefile.PL
Makefileを実行するとPLの場合、Makefileが生成されます.これがExtUtils::MakeMakerモジュールのすべてです.
akefile.PLは、ExtUtils::MakeMakerをロードし、WriteMakefile()関数を実行してMakefileを生成する簡単なプログラムです.次のコードセグメントは簡単なMakefileです.PLファイルの例:
use ExtUtils::MakeMaker;
WriteMakefile(
NAME => 'Your::Module',
VERSION_FROM => 'lib/Your/Module.pm'
);
ここでNAMEはターゲットプロジェクトの最上位ネーミングスペースです.VERSION_FROMは、パブリッシュするアイテム全体を含む$VERSION変数のファイルです.通常、トップモジュールと同じです.
MANIFEST
このファイルには、プロジェクトのパブリッシュ時に含まれるすべてのファイルがリストされています.次に、MANIFESTファイルの内容の例を示します.
Makefile.PL
MANIFEST
lib/Your/Module.pm
MANIFESTファイルの内容は、ファイルパスに対する区切り記号がUnixで約定された
/
である必要があります.Unixシステムでなくても同じです.このファイルは自分で作成したりmake manifestコマンドを使用して生成したりすることができます.lib/
このディレクトリにターゲットアイテムのすべてを格納します.pm和.podファイル.ネーミングスペースによって異なるフォルダに分散されます.
t/
このディレクトリには、あなたのモジュールをテストするすべてのコードが格納されています.各テストファイルは.tエンディング.make testコマンドは、ここのすべてのテストを実行します.参加する場合、すべてのテストファイルはt/ディレクトリの下にあります.しかし、サブディレクトリを構築し、異なるテストファイルをそれぞれ異なるディレクトリの下に置くことで、テストファイルが多い場合に効率的に管理することができます.
t/foo/subdir_test.t
make testコマンドを実行するときにターゲットプロジェクトt/ディレクトリのすべてのテストコードを実行できるようにするには、Makefile.PLファイルWriteMakeFileメソッドで呼び出された関数には、次のようなものが含まれます.
test => {TESTS => 't/*.t t/*/*.t'}
上のコードはt/ディレクトリの下のすべてを使用します.tファイルおよびt/ディレクトリのサブディレクトリの下のすべて.tファイルはmake testコマンドを実行するときに実行できます.もちろん、t/ディレクトリの下に保存されているテストファイルにより深いレベルのネストがある場合は、testパラメータオプションにより多くの内容を指定する必要があります.
t/foo/bar/subdir_test.t
test => {TESTS => 't/*.t t/*/*/*.t'}
ルール、すなわち
*
はワイルドカードであるが、/
と一致しないことに気づくべきである.注意:テスト実行時の現在のディレクトリは、プロジェクトの最上位ターゲットです.
Changes
このファイルには、ターゲットアイテムの変更記録が記録されています.ファイルのフォーマットは比較的自由で、以下は参考になる例です.
1.01 Fri Apr 11 00:21:25 PDT 2003
- thing() does some stuff now
- fixed the wiggy bug in withit()
1.00 Mon Apr 7 00:57:15 PDT 2003
- "Rain of Frogs" now supported
README
ターゲットプロジェクトの簡単な説明は、ユーザーにどのような状況であなたのプロジェクトを使用できるか、およびこのプロジェクトを使用するいくつかの制限を紹介することです.CPANは自動的にこのファイルの内容をCPANユーザーに表示します.これは彼らが最初に見たあなたのプロジェクトに関する内容で、これらの内容に基づいてこのプロジェクトが彼らに適しているかどうかを判断します.
INSTALL
モジュールとすべての依存関係をインストールする方法については、次の情報を参照してください.
このファイルにはmake manifestコマンドで使用される正規表現が記録されており、これらの正規表現に一致するすべてのファイルはmake manifestコマンドで生成されたMANIFESTファイルに含まれません.これらの正規表現は、プロジェクトで検索されたファイルパスごとにチェックされます.正規表現がファイルに一致しない場合、このファイルはMANIFESTファイルから除外されます.
WriteMakefileメソッド
WriteMakefileメソッドはこのモジュールから外部に導出された唯一のメソッドであり,このメソッドではExtUtils::MakeMakerモジュールのすべての機能を実現している.すべての機能はWriteMakefileメソッドのパラメータによって制御されます.
まず、WriteMakefileでサポートされているすべてのパラメータオプション:
ABSTRACT , ( ) , CPAN PPD 。
ABSTRACT_FROM POD
AUTHOR
BINARY_LOCATION
BUILD_REQUIRES
C
CCFLAGS
CONFIG
CONFIGURE
CONFIGURE_REQUIRES Makefile.PL
DEFINE
DESTDIR
DIR
DISTNAME
DISTVNAME
DLEXT
DL_FUNCS
DL_VARS
EXCLUDE_EXT
EXE_FILES
FIRST_MAKEFILE
FULLPERL
FULLPERLRUN
FULLPERLRUNINST
FUNCLIST
H
IMPORTS
INC
INCLUDE_EXT
INSTALLARCHLIB
INSTALLBIN
INSTALLDIRS
INSTALLMAN1DIR
INSTALLMAN3DIR
INSTALLPRIVLIB
INSTALLSCRIPT
INSTALLSITEARCH
INSTALLSITEBIN
INSTALLSITELIB
INSTALLSITEMAN1DIR
INSTALLSITEMAN3DIR
INSTALLSITESCRIPT
INSTALLVENDORARCH
INSTALLVENDORBIN
INSTALLVENDORLIB
INSTALLVENDORMAN1DIR
INSTALLVENDORMAN3DIR
INSTALLVENDORSCRIPT
INST_ARCHLIB
INST_BIN
INST_LIB
INST_MAN1DIR
INST_MAN3DIR
INST_SCRIPT
LD
LDDLFLAGS
LDFROM
LIB
LIBPERL_A
LIBS
LICENSE
LINKTYPE
MAGICXS
MAKE
MAKEAPERL
MAKEFILE_OLD
MAN1PODS
MAN3PODS
MAP_TARGET
META_ADD CPAN
META_MERGE CPAN
MIN_PERL_VERSION Perl
MYEXTLIB
NAME
NEEDS_LINKING
NOECHO
NORECURS
NO_META
NO_MYMETA
NO_PACKLIST
NO_PERLLOCAL
NO_VC
OBJECT
OPTIMIZE
PERL
PERL_CORE
PERLMAINCC
PERL_ARCHLIB
PERL_LIB
PERL_MALLOC_OK
PERLPREFIX
PERLRUN
PERLRUNINST
PERL_SRC
PERM_DIR
PERM_RW
PERM_RWX
PL_FILES MakeMaker perl
PM
PMLIBDIRS
PM_FILTER
POLLUTE
PPM_INSTALL_EXEC
PPM_INSTALL_SCRIPT
PPM_UNINSTALL_EXEC
PPM_UNINSTALL_SCRIPT
PREFIX
PREREQ_FATAL , 。
PREREQ_PM
PREREQ_PRINT
PRINT_PREREQ
SITEPREFIX
SIGN
SKIP
TEST_REQUIRES
TYPEMAPS
VENDORPREFIX
VERBINST
VERSION
VERSION_FROM
VERSION_SYM
XS
XSBUILD
XSMULTI
XSOPT
XSPROTOARG
XS_VERSION
clean
depend
dist
dynamic_lib
linkext
macro
postamble
realclean
test
tool_autosplit
WriteMakefileメソッドの共通パラメータオプションについて説明します.
ABSTRACT
プロジェクトの要約を指定し、プロジェクトの一言(単行)の説明をCPANにアップロードするとPPDドキュメントに追加されます.
ABSTRACT_FROM
モジュールファイルのPODから要約を抽出することを指定します.MakeMakerは、指定されたモジュールファイルのPODで正則
/^($package\s-\s)(.*)/
の照合を行います.一致した$2を要約とする.これは通常、「=head 1 NAME」セクションの最初の行です.AUTHOR
著者の名前(および電子メールアドレス)を含む文字列配列.PPM(Perl Package Manager)用のCPAN Metaファイル(META.ymlまたはMETA.json)およびPPD(Perl Package Description)ファイル.
BUILD_REQUIRES
モジュール構築時に依存するパケットは、実行時に依存しません.このパラメータ値のタイプはhashrefであり、このhashrefではkeyが依存パケット名、valueが依存パケットのバージョン番号である.
CONFIGURE_REQUIRES
Makefileを実行します.PLファイル時に依存するパケットは,プロジェクト構築や実行時にこれらのパケットに依存しない.このパラメータ値のタイプはhashrefであり、このhashrefではkeyが依存パケット名、valueが依存パケットのバージョン番号である.
META_ADD
META_MERGE
プロジェクトの情報をCPANのメタデータに追加し、デフォルトのメタデータと同じキーワードMETA_を持っている場合ADDとMETA_MERGEの動作は異なります.META_ADDはデフォルト値を上書きし、META_MERGEはここの値をデフォルト値とマージします.
デフォルト値を上書きすると判断しない限り、META_を優先的に使用してください.MERGE.
注意:これらのデータはMETAの生成にのみ使用する.ymlとMETAjson、直接METAにされない.ymlとMETAjsonが使用します.
ここではCPAN Meta仕様1.4がデフォルトで使用されています.2.0バージョンを使用する場合は、meta-specキーを指定する必要があります.次のようになります.
META_MERGE => {
"meta-spec" => { version => 2 },
resources => {
repository => {
type => 'git',
url => 'git://github.com/Perl-Toolchain-Gang/ExtUtils-MakeMaker.git',
web => 'https://github.com/Perl-Toolchain-Gang/ExtUtils-MakeMaker',
},
},
},
PREREQ_FATAL
このオプションは、プロジェクトの実行時に依存しない場合にインストールを禁止するかどうかを示すブール値を指定します.値が真の場合、PREREQ_PMで指定したモジュールが満たされないと致命的なエラーが発生してインストールを終了します.
このパラメータを真に設定することは推奨されません.コード実行時に依存するパッケージが満たされているかどうかを確認するテスト(t/00 compile.t)を作成し、満たされていない場合はテスト実行時に詳細な注意を与えることができ、モジュールインストールツールはテスト中に与えられた情報に基づいて依存関係を自動的に解決します.
PL_FILES
MakeMakerは、このパラメータオプションで指定したperlファイルを構築時に実行します.デフォルトではトップディレクトリの名前は*です.PL(Makefile.PLおよびBuild.PLを除く)のどのファイルもPerlプログラムとして想定され、構築中にMakeMakerがこれらのプログラムを実行し、独自のbasenameをパラメータとして使用します.次のコードセグメントに示します.
perl foo.PL foo
PL_を通じてFILESパラメータオプションは、このデフォルトの動作を上書きするために独自のファイルのセットを指定します.PL_FILESはhashrefを受け入れ、キー名は実行するファイルであり、キー値はファイルを実行するときに入力される最初のパラメータである.
PL_FILES => {'bin/foobar.PL' => 'bin/foobar'}
PL_FILES => {'foo.PL' => 'foo.c'}
以上のような構成でbin/foobarが以下のように実行する.PL
perl bin/foobar.PL bin/foobar
異なるパラメータを使用して同じファイルを複数回実行する必要がある場合は、キー値としてデータ参照を使用できます.
PL_FILES => {'bin/foobar.PL' => [qw(bin/foobar1 bin/foobar2)]}
この場合、プログラムはターゲットファイルごとに1回実行します.
perl bin/foobar.PL bin/foobar1
perl bin/foobar.PL bin/foobar2
PREREQ_PM
プロジェクトの実行時に依存するパッケージ.このパラメータ値のタイプはhashrefであり、このhashrefではkeyが依存パケット名、valueが依存パケットのバージョン番号である.指定したバージョン番号が0の場合は、すべてのバージョンが可能であることを示します.次に例を示します.
PREREQ_PM => {
# Require Test::More at least 0.47
"Test::More" => "0.47",
# Require any version of Acme::Buffy
"Acme::Buffy" => 0,
}
の最後の部分
しばらくはこれだけ書いておくと、私自身にとっては十分で、その後は実際の使用過程で徐々に完備されています.
a