Какие инструменты могут помочь в создании проекта XS?

Я недавно начал изучать XS, используя perlxstut , и в руководстве предлагается, чтобы я создал свой модуль, используя старый инструмент 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?

РЕДАКТИРОВАТЬ: я вижу , этот вопрос отвечает на мой вопрос о создании проекта. Я все еще хотел бы знать о сборке: является ли EUMM единственной опцией или Module :: Build и Dist :: Zilla также способны создавать XS?

7
задан Community 23 May 2017 в 12:09
поделиться

2 ответа

Оказывается, Module::Build прекрасно компилирует XS. Вот полная сборка.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 include-файлами (такими как ppport.h) в каталоге include/. , исходные файлы .c в каталоге src/ и файл .xs, соответствующий пакету Chocolate::Belgian в проекте базовый каталог.

extra_compiler_flags соответствует make CCFLAGS, а extra_linker_flags соответствует LIBS (поэтому вам может понадобиться -lm для ссылка на математическую библиотеку C).

4
ответ дан 7 December 2019 в 07:37
поделиться

Dist::Zilla не замена EUMM или Module::Build, она сгенерирует для вас Makefile.Pl (и т. д.), я бы не стал будете удивлены, узнав, что он не может сделать это для проекта XS, но есть способы управлять своим собственным проектом dzil. Он может работать с любым Makefile.Pl, с которым он поставляется (или Build.pl).

Итак, мой ответ на часть вашего вопроса, касающуюся Dist::Zilla, таков: Dist::Zilla не выполняет эту роль в проекте.

2
ответ дан 7 December 2019 в 07:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: