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

标签 perl module perl-xs makemaker

我最近开始使用 perlxstut 学习 XS并且教程建议我使用旧的 h2xs 创建我的模块创建 ExtUtils::MakeMaker 的工具——基于项目。然而对于纯粹的 Perl 项目,h2xs/EUMM 长期以来一直不受欢迎,而倾向于 Module::Install , Module::BuildDist::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/

相关文章:

regex - 如何打印每个匹配行的行号?

c - XS 模块和 perl 构建之间的结构定义冲突

perl - 如何模拟来自 XS 的 &sname 调用?

Perl CGI 产生意外的输出

perl - 如何访问 If/else 范围之外的值

perl - 如何在 Unix/Linux 上使用 perl 执行批量 DNS 查询?

node.js - 错误: Cannot find module './is-buffer'

python - ChatCompletion 功能从 openai 模块中消失

python - 模块导入路径

perl - 如何从 XS 访问当前上下文?