我最近开始使用
perlxstut学习XS,教程建议我使用旧的
h2xs工具创建我的模块来创建基于
ExtUtils::MakeMaker的项目.然而,对于纯Perl项目,h2xs / EUMM长期以来一直不赞成
Module::Install,Module::Build或
Dist::Zilla.
是否有更现代的方式来创建XS项目? Module::Starter可以创建XS项目吗? Module :: Build或Dist :: Zilla可以构建XS项目吗?他们的pod页面对此事保持沉默.
另一方面,针对h2xs / EUMM的批评是否适用于XS项目?如果你还需要一个C编译器,那么要求make工具是否合理?
编辑:我看到this question回答了关于创建项目的问题.我仍然想知道构建:EUMM是唯一的选择,还是Module :: Build和Dist :: Zilla也能够构建XS?
解决方法
事实证明,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;
这将在include /目录中创建.h包含文件(如ppport.h),在src /目录中生成.c源文件,在项目基目录中创建与Chocolate :: Belgian包对应的.xs文件. .
extra_compiler_flags对应于make CCFLAGS,而extra_linker_flags对应于LIBS(因此你可能需要-lm来链接C数学库).