Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p><strong>NOTE</strong> This advice is out of date. <a href="http://www.dagolden.com/index.php/2140/paying-respect-to-modulebuild/" rel="nofollow noreferrer">Module::Build has been removed from the Perl core</a> but lives on as a CPAN module. The pros and cons still stand, and my opinions about MakeMaker still stand.</p> <hr> <p>As the former maintainer of ExtUtils::MakeMaker, I like to recommend Module::Build because MakeMaker is a horror show. Module::Build is so much better put together. But those aren't your concerns and I'll present my "least hassle for you" answer.</p> <h2>Executive Summary:</h2> <p>Because Module::Build support is not 100% in place through all of Perl, start with MakeMaker. If you want to do any customization at all, switch to Module::Build. Since their basic layout, options and interface are almost identical this will be painless. As seductive as it looks, avoid Module::Install.</p> <p>Fortunately, Module::Build can emulate MakeMaker which helps some, but doesn't help if you're going to do any customization. See <a href="http://search.cpan.org/perldoc?Module::Build::Compat" rel="nofollow noreferrer">Module::Build::Compat</a>.</p> <p>For CPAN releases using Module::Build is fine. There's enough Module::Build stuff on CPAN now that everyone's dealt with getting it bootstrapped already.</p> <p>Finally, the new <a href="http://module-build.sourceforge.net/META-spec.html#configure_requires" rel="nofollow noreferrer"><code>configure_requires</code></a> option lets CPAN shells know to install Module::Build before they can start building the module. Unfortunately only the latest CPAN shells know about configure_requires.</p> <p>Oh, whatever you do don't use h2xs (unless you're writing XS code... and even then think about it).</p> <h2>MakeMaker Pros:</h2> <ul> <li>Comes with Perl and used by the Perl core (therefore it is actively maintained and will remain so forever)</li> <li>Everything knows what to do with a Makefile.PL.</li> <li>Most module authoring documentation will cover MakeMaker.</li> <li>Uses make (those who know make can debug and patch the build process)</li> </ul> <h2>MakeMaker Cons:</h2> <ul> <li>Requires make (think Windows)</li> <li>Difficult to customize</li> <li>Even harder to customize and make cross platform</li> <li>Difficult to debug when something goes wrong (unless you understand make)</li> </ul> <h2>Module::Build Pros:</h2> <ul> <li>Easier to customize/subclass</li> <li>Pure Perl</li> <li>Easier to debug (it's Perl)</li> <li>Can emulate MakeMaker in several ways</li> <li>The CPAN shell will install Module::Build for you</li> </ul> <h2>Module::Build Cons:</h2> <ul> <li>The Module::Build maintainers (and indeed all of the Perl Toolchain Gang) hate it </li> <li>Older versions of CPAN clients (including CPANPLUS) don't know anything about Module::Build.</li> </ul> <h2>Module::Install Pros:</h2> <ul> <li>Slick interface</li> <li>Bundles itself, you have a known version</li> <li>Everything knows how to deal with a Makefile.PL</li> </ul> <h2>Module::Install Cons:</h2> <ul> <li>Requires make</li> <li>Always uses bundled version, vulnerable to external breakage</li> <li>Difficult to customize outside its interface</li> <li>Mucks with the guts of MakeMaker so a new MakeMaker release will eventually break it.</li> <li>Does not know how to generate a META file using the v2 meta-spec (increasingly a problem with newer tools)</li> </ul>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload