Я недавно начал изучать 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?
Оказывается, 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).
Dist::Zilla не замена EUMM или Module::Build, она сгенерирует для вас Makefile.Pl
(и т. д.), я бы не стал будете удивлены, узнав, что он не может сделать это для проекта XS, но есть способы управлять своим собственным проектом dzil. Он может работать с любым Makefile.Pl
, с которым он поставляется (или Build.pl).
Итак, мой ответ на часть вашего вопроса, касающуюся Dist::Zilla, таков: Dist::Zilla не выполняет эту роль в проекте.