2013-08-29 77 views
0

我正在研究perl模块Module :: Build以创建模块。我需要知道是否有办法将所有* .pm文件的默认目录 - lib /更改为自定义目录。例如默认的* .pm文件的源代码目录是“lib/directory”,我想将它改为“home // pm /”并从它复制。 daxim的评论后更改perl模块的默认源目录模块::生成

编辑:

我的目录结构变为:

home/user/workspace/try_ModuleBuild/LIBS/perl/Private/DB.pm 
home/user/workspace/try_ModuleBuild/RELEASE/ModuleBuild/Build.PL 
home/user/workspace/try_ModuleBuild/RELEASE/ModuleBuild/lib/API.pm 
home/user/workspace/try_ModuleBuild/RELEASE/ModuleBuild/RESOURCES/prepare/form.html 

所有文件都是空的。 我Build.PL包含:

my $self = Module::Build->new 
    (
     module_name => “Project”, 
     dist_author => [“My Name”], 
     build_requires => { 
          'Test::More' => 0.98, 
             'TAP::Harness' => 3.23 
        }, 
     dist_abstract  => “Example”, 
     configure_requires => { 'Module::Build' => 0.40 }, 
     requires  => {'perl' => '5.14.0'}, 
     add_to_cleanup   => [ 'Project::API-*' ], 
     release_status  => 'stable', 
     use_tap_harness  => 1, 
     license   => 'restrictive', 
     RESOURCES_files => {'RESOURCES/prepare/form.html' =>'/RESOURCES/new/prepare/form.html'}, 

     lib_files=>{'/home/user/workspace/try_ModuleBuild/LIBS/perl/Private/DB.pm'=>'/lib/Private/DB.pm'}, 
     install_path   => { 
          'lib'=>'/home/user/MB/lib', 
          'RESOURCES'=>"/home/user/MB/RESOURCES" 
              }, 
); 

    $self->add_build_element('RESOURCES'); 

    $self->add_build_element('lib'); 
    $self->create_build_script(); 

问题在于文件:

home/user/workspace/try_ModuleBuild/LIBS/perl/Private/DB.pm' 

自其未在目录:

home/user/workspace/try_ModuleBuild/RELEASE/ModuleBuild/LIBS 

在Build.PL是。

perl Build.PL 
./Build manifest 
./Build fakeinstall –install_base lib=/home/user/directory 

fakeinstall返回结果

“Installing /home/user/MB/lib/Private/DB.pm“ 

并没有问题运行。

./Build dist 

然而,DB.pm从创建.tar.gz文件丢失。

问题是我只能从home/user/workspace/try_ModuleBuild/RELEASE/ModuleBuild /目录中添加文件,而我想从home/user/workspace/try_ModuleBuild/LIBS/perl /目录。

+0

能否请你提供我可以运行一个最小的例子吗?考虑到提示,我已花了10分钟试图重建你遇到的问题,但失败了。 – daxim

回答

0
use Module::Build; 
use File::Copy 'cp'; 

my $class = Module::Build->subclass(code => <<''); 
sub process_EXTRALIB_files { 
    my ($self, $target) = @_; 
    while (my ($from, $to) = each %{ $self->{properties}{"${target}_files"} }) { 
     cp $from, $to; 
     $self->_add_to_manifest('MANIFEST', $to); 
    } 
} 

my $self = Module::Build->new(
    ⋮ 
    RESOURCES_files => {'RESOURCES/prepare/form.html' => 'RESOURCES/new/prepare/form.html'}, 
    EXTRALIB_files  => {'../../LIBS/perl/Private/DB.pm' => '../lib/Private/DB.pm'}, 
); 
$self->add_build_element('RESOURCES'); 
$self->add_build_element('EXTRALIB'); 
$self->create_build_script; 

perl Build.PL 
./Build 
./Build manifest 
./Build dist 
+0

我自己想出了复制方法,但是我试图避免无意义的文件复制。没有一种方法可以将特定的源目录提供给Module :: Build吗? –

+0

是的,但这对'distdir'目标不起作用。无论如何,您需要操作清单,因为它只向下读取基本目录。 – daxim