Какие инструменты могут помочь в создании проекта XS? - PullRequest
7 голосов
/ 28 августа 2010

Я недавно начал изучать XS с использованием perlxstut , и в руководстве предлагается создать мой модуль с использованием старого инструмента h2xs для создания ExtUtils :: MakeMaker основанный на проекте. Однако для проектов на чистом Perl h2xs / EUMM уже давно отвергается в пользу Module :: Install , Module :: Build или Dist :: Zilla .

Существует ли более современный способ создания проектов XS? Может ли Module :: Starter создавать проекты XS? Может ли Module :: Build или Dist :: Zilla создавать проекты XS? На их страницах ничего не сказано.

С другой стороны, относится ли критика, которая была высказана в отношении h2xs / EUMM, к проектам XS? В любом случае, если вам нужен компилятор C, разумно ли требовать также инструмент make?

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

Ответы [ 3 ]

4 голосов
/ 29 августа 2010

Оказывается, что 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 соответствует make CCFLAGS, в то время как extra_linker_flags соответствует LIBS (поэтому вы можете захотеть -lm там связать библиотеку C math).

2 голосов
/ 28 августа 2010

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

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

1 голос
/ 28 августа 2010

Я всегда просто использую довольно простой дистрибутив XS в качестве отправной точки.h2xs может выполнять часть генерации XS, анализируя заголовок, но большую часть времени я обнаружил, что он слишком ограничен, чтобы быть полезным.

Если вы планируете обернуть C ++, возможно, вы захотите взглянутьв модуле :: Build :: WithXSpp.

...