⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 authoring.pod

📁 source of perl for linux application,
💻 POD
字号:
=head1 NAMEModule::Build::Authoring - Authoring Module::Build modules=head1 DESCRIPTIONWhen creating a C<Build.PL> script for a module, something like thefollowing code will typically be used:  use Module::Build;  my $build = Module::Build->new    (     module_name => 'Foo::Bar',     license  => 'perl',     requires => {                  'perl'          => '5.6.1',                  'Some::Module'  => '1.23',                  'Other::Module' => '>= 1.2, != 1.5, < 2.0',                 },    );  $build->create_build_script;A simple module could get away with something as short as this for itsC<Build.PL> script:  use Module::Build;  Module::Build->new(    module_name => 'Foo::Bar',    license     => 'perl',  )->create_build_script;The model used by C<Module::Build> is a lot like the C<MakeMaker>metaphor, with the following correspondences:   In Module::Build                 In ExtUtils::MakeMaker  ---------------------------      ------------------------   Build.PL (initial script)        Makefile.PL (initial script)   Build (a short perl script)      Makefile (a long Makefile)   _build/ (saved state info)       various config text in the MakefileAny customization can be done simply by subclassing C<Module::Build>and adding a method called (for example) C<ACTION_test>, overridingthe default 'test' action.  You could also add a method calledC<ACTION_whatever>, and then you could perform the action C<Buildwhatever>.For information on providing compatibility withC<ExtUtils::MakeMaker>, see L<Module::Build::Compat> andL<http://www.makemaker.org/wiki/index.cgi?ModuleBuildConversionGuide>.=head1 STRUCTUREModule::Build creates a class hierarchy conducive to customization.Here is the parent-child class hierarchy in classy ASCII art:   /--------------------\   |   Your::Parent     |  (If you subclass Module::Build)   \--------------------/            |            |   /--------------------\  (Doesn't define any functionality   |   Module::Build    |   of its own - just figures out what   \--------------------/   other modules to load.)            |            |   /-----------------------------------\  (Some values of $^O may   |   Module::Build::Platform::$^O    |   define specialized functionality.   \-----------------------------------/   Otherwise it's ...::Default, a            |                              pass-through class.)            |   /--------------------------\   |   Module::Build::Base    |  (Most of the functionality of    \--------------------------/   Module::Build is defined here.)=head1 SUBCLASSINGRight now, there are two ways to subclass Module::Build.  The firstway is to create a regular module (in a C<.pm> file) that inheritsfrom Module::Build, and use that module's class instead of usingModule::Build directly:  ------ in Build.PL: ----------  #!/usr/bin/perl  use lib q(/nonstandard/library/path);  use My::Builder;  # Or whatever you want to call it  my $build = My::Builder->new    (     module_name => 'Foo::Bar',  # All the regular args...     license     => 'perl',     dist_author => 'A N Other <me@here.net.au>',     requires    => { Carp => 0 }    );  $build->create_build_script;This is relatively straightforward, and is the best way to do thingsif your My::Builder class contains lots of code.  TheC<create_build_script()> method will ensure that the current value ofC<@INC> (including the C</nonstandard/library/path>) is propogated tothe Build script, so that My::Builder can be found when running buildactions.For very small additions, Module::Build provides a C<subclass()>method that lets you subclass Module::Build more conveniently, withoutcreating a separate file for your module:  ------ in Build.PL: ----------  #!/usr/bin/perl  use Module::Build;  my $class = Module::Build->subclass    (     class => 'My::Builder',     code => q{       sub ACTION_foo {         print "I'm fooing to death!\n";       }     },    );  my $build = $class->new    (     module_name => 'Foo::Bar',  # All the regular args...     license     => 'perl',     dist_author => 'A N Other <me@here.net.au>',     requires    => { Carp => 0 }    );  $build->create_build_script;Behind the scenes, this actually does create a C<.pm> file, since thecode you provide must persist after Build.PL is run if it is to bevery useful.See also the documentation for the L<Module::Build::API/"subclass()">method.=head1 PREREQUISITES=head2 Types of prerequisitesTo specify what versions of other modules are used by thisdistribution, several types of prerequisites can be defined with thefollowing parameters:=over 3=item configure_requiresItems that must be installed I<before> configuring this distribution(i.e. before running the F<Build.PL> script).  This might be aspecific minimum version of C<Module::Build> or any other module theF<Build.PL> needs in order to do its stuff.  Clients like C<CPAN.pm>or C<CPANPLUS> will be expected to pick C<configure_requires> out of theF<META.yml> file and install these items before running theC<Build.PL>.*TODO* auto-add M::B?  In what circumstances?=item build_requiresItems that are necessary for building and testing this distribution,but aren't necessary after installation.  This can help users who onlywant to install these items temporarily.  It also helps reduce thesize of the CPAN dependency graph if everything isn't smooshed intoC<requires>.=item requiresItems that are necessary for basic functioning.=item recommendsItems that are recommended for enhanced functionality, but there areways to use this distribution without having them installed.  Youmight also think of this as "can use" or "is aware of" or "changesbehavior in the presence of".=item conflictsItems that can cause problems with this distribution when installed.This is pretty rare.=back=head2 Format of prerequisitesThe prerequisites are given in a hash reference, where the keys arethe module names and the values are version specifiers:  requires => {               Foo::Module => '2.4',               Bar::Module => 0,               Ken::Module => '>= 1.2, != 1.5, < 2.0',               perl => '5.6.0'              },The above four version specifiers have different effects.  The valueC<'2.4'> means that B<at least> version 2.4 of C<Foo::Module> must beinstalled.  The value C<0> means that B<any> version of C<Bar::Module>is acceptable, even if C<Bar::Module> doesn't define a version.  Themore verbose value C<'E<gt>= 1.2, != 1.5, E<lt> 2.0'> means thatC<Ken::Module>'s version must be B<at least> 1.2, B<less than> 2.0,and B<not equal to> 1.5.  The list of criteria is separated by commas,and all criteria must be satisfied.A special C<perl> entry lets you specify the versions of the Perlinterpreter that are supported by your module.  The same versiondependency-checking semantics are available, except that we alsounderstand perl's new double-dotted version numbers.=head2 XS ExtensionsModules which need to compile XS code should list C<ExtUtils::CBuilder>as a C<build_requires> element.=head1 SAVING CONFIGURATION INFORMATIONModule::Build provides a very convenient way to save configurationinformation that your installed modules (or your regression tests) canaccess.  If your Build process calls the C<feature()> orC<config_data()> methods, then a C<Foo::Bar::ConfigData> module willautomatically be created for you, where C<Foo::Bar> is theC<module_name> parameter as passed to C<new()>.  This module providesaccess to the data saved by these methods, and a way to update thevalues.  There is also a utility script called C<config_data>distributed with Module::Build that provides a command line interfaceto this same functionality.  See also the generatedC<Foo::Bar::ConfigData> documentation, and the C<config_data>script's documentation, for more information.=head1 STARTING MODULE DEVELOPMENTWhen starting development on a new module, it's rarely worth your timeto create a tree of all the files by hand.  Some automaticmodule-creators are available: the oldest is C<h2xs>, which hasshipped with perl itself for a long time.  Its name reflects the factthat modules were originally conceived of as a way to wrap up a Clibrary (thus the C<h> part) into perl extensions (thus the C<xs>part).These days, C<h2xs> has largely been superseded by modules likeC<ExtUtils::ModuleMaker>, and C<Module::Starter>.  They have varyingdegrees of support for C<Module::Build>.=head1 AUTOMATIONOne advantage of Module::Build is that since it's implemented as Perlmethods, you can invoke these methods directly if you want to installa module non-interactively.  For instance, the following Perl scriptwill invoke the entire build/install procedure:  my $build = Module::Build->new(module_name => 'MyModule');  $build->dispatch('build');  $build->dispatch('test');  $build->dispatch('install');If any of these steps encounters an error, it will throw a fatalexception.You can also pass arguments as part of the build process:  my $build = Module::Build->new(module_name => 'MyModule');  $build->dispatch('build');  $build->dispatch('test', verbose => 1);  $build->dispatch('install', sitelib => '/my/secret/place/');Building and installing modules in this way skips creating theC<Build> script.=head1 MIGRATIONNote that if you want to provide both a F<Makefile.PL> and aF<Build.PL> for your distribution, you probably want to add thefollowing to C<WriteMakefile> in your F<Makefile.PL> so that MakeMakerdoesn't try to run your F<Build.PL> as a normal F<.PL> file:  PL_FILES => {},You may also be interested in looking at the C<Module::Build::Compat>module, which can automatically create various kinds of F<Makefile.PL>compatibility layers.=head1 AUTHORKen Williams <kwilliams@cpan.org>Development questions, bug reports, and patches should be sent to theModule-Build mailing list at <module-build@perl.org>.Bug reports are also welcome at<http://rt.cpan.org/NoAuth/Bugs.html?Dist=Module-Build>.The latest development version is available from the Subversionrepository at <https://svn.perl.org/modules/Module-Build/trunk/>=head1 SEE ALSOperl(1), L<Module::Build>(3), L<Module::Build::API>(3),L<Module::Build::Cookbook>(3), L<ExtUtils::MakeMaker>(3), L<YAML>(3)F<META.yml> Specification:L<http://module-build.sourceforge.net/META-spec-current.html>L<http://www.dsmit.com/cons/>L<http://search.cpan.org/dist/PerlBuildSystem/>=cut

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -