ExtUtils::MakeMaker

8562 ワード

概要
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
モジュールとすべての依存関係をインストールする方法については、次の情報を参照してください.
  • このプロジェクトにインストールする必要がある依存モジュール
  • を使用する
  • このプロジェクトが実行可能なPerlの最小バージョン
  • このプロジェクトのオペレーティングシステムへの依存
  • MANIFEST.SKIP
    このファイルには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