NOTE This advice is out of date. Module::Build has been removed from the Perl core but lives on as a CPAN module. The pros and cons still stand, and my opinions about MakeMaker still stand.
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.
Executive Summary:
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.
Fortunately, Module::Build can emulate MakeMaker which helps some, but doesn’t help if you’re going to do any customization. See Module::Build::Compat.
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.
Finally, the new configure_requires
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.
Oh, whatever you do don’t use h2xs (unless you’re writing XS code… and even then think about it).
MakeMaker Pros:
- Comes with Perl and used by the Perl core (therefore it is actively
maintained and will remain so forever) - Everything knows what to do with a Makefile.PL.
- Most module authoring documentation will cover MakeMaker.
- Uses make (those who know make can debug and patch the build
process)
MakeMaker Cons:
- Requires make (think Windows)
- Difficult to customize
- Even harder to customize and make cross platform
- Difficult to debug when something goes wrong (unless you understand make)
Module::Build Pros:
- Easier to customize/subclass
- Pure Perl
- Easier to debug (it’s Perl)
- Can emulate MakeMaker in several ways
- The CPAN shell will install Module::Build for you
Module::Build Cons:
- The Module::Build maintainers (and indeed all of the Perl Toolchain Gang) hate it
- Older versions of CPAN clients (including CPANPLUS) don’t know anything about Module::Build.
Module::Install Pros:
- Slick interface
- Bundles itself, you have a known version
- Everything knows how to deal with a Makefile.PL
Module::Install Cons:
- Requires make
- Always uses bundled version, vulnerable to external breakage
- Difficult to customize outside its interface
- Mucks with the guts of MakeMaker so a new MakeMaker release will eventually break it.
- Does not know how to generate a META file using the v2 meta-spec
(increasingly a problem with newer tools)