哪些工具可以帮助构建XS项目?

时间:2010-08-28 08:52:21

标签: perl module perl-xs makemaker

我最近开始使用perlxstut学习XS,教程建议我使用旧的h2xs工具创建我的模块,以创建基于ExtUtils::MakeMaker的项目。然而,对于纯Perl项目,h2xs / EUMM长期以来一直不赞成Module::InstallModule::BuildDist::Zilla

是否有更现代的方式来创建XS项目? Module::Starter可以创建XS项目吗? Module :: Build或Dist :: Zilla可以构建XS项目吗?他们的粉丝页面对此事保持沉默。

另一方面,针对h2xs / EUMM的批评是否适用于XS项目?如果你还需要一个C编译器,那么同样需要make工具是否合理?

编辑:我看到this question回答了关于创建项目的问题。我仍然想知道构建:EUMM是唯一的选择,还是Module :: Build和Dist :: Zilla也能够构建XS?

3 个答案:

答案 0 :(得分:4)

事实证明,Module :: Build完全能够编译XS。这是一个完整的Build.PL,我设法凑到一起:

use strict;
use Module::Build;

my $build = Module::Build->new(
    module_name  => 'Chocolate::Belgian',
    dynamic_config => 1,
    license      => 'perl',
    requires     => {
        'Module::Build' => '0.19', # xs
        'Test::More' => 0,
    },
    extra_compiler_flags => '-Iinclude',
    extra_linker_flags   => '',
    c_source     => 'src',
    needs_compiler => 1,
    xs_files     => {
        './Belgian.xs' => 'lib/Chocolate/Belgian.xs',
    },

   );

$build->create_build_script;

这将在.h目录中构建ppport.h包含文件(例如include/),.c目录中的src/源文件,以及与项目基目录中的包.xs对应的Chocolate::Belgian文件。

extra_compiler_flags对应make CCFLAGS,而extra_linker_flags对应LIBS(因此您可能需要-lm来链接C数学库。)< / p>

答案 1 :(得分:2)

Dist :: Zilla 不是是EUMM或Module :: Build的替代品,它会为你生成一个Makefile.Pl(等),我不会感到惊讶听说它不能为XS项目做到这一点,但有一些方法可以为dzil项目管理自己的项目。它可以与它提供的任何Makefile.Pl(或Build.pl)一起使用。

所以我对你的问题的Dist :: Zilla部分的回答是,Dist :: Zilla没有在项目中填补这个角色。

答案 2 :(得分:1)

我总是只使用一些相当简单的XS发行版作为起点。 h2xs可以通过解析标题来完成一些XS生成,但大多数时候,我发现它太有限了,无法使用。

如果您打算包装C ++,您可能需要查看Module :: Build :: WithXSpp。