我最近开始使用 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;
这将构建一个带有
.h
的发行版在 ppport.h
中包含文件(例如 include/
)目录, .c
src/
中的源文件目录和 .xs
对应包的文件Chocolate::Belgian
在项目基目录中。extra_compiler_flags
对应于制作 CCFLAGS
, 而 extra_linker_flags
对应于 LIBS
(所以你可能想要 -lm
在那里链接 C 数学库)。
关于perl - 哪些工具可以帮助构建 XS 项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3590132/