Domanda

Recentemente ho iniziato a studiare XS utilizzando perlxstut e il tutorial suggerisce che Creo il mio modulo usando il vecchio h2xs strumento per creare un ExtUtils :: MakeMaker progetto based. Tuttavia, per i progetti puri Perl, h2xs / EUMM è stata a lungo sfavorito a favore di Modulo :: Install , Modulo :: Costruire o Dist :: Zilla .

C'è un modo più moderno di creazione di progetti XS? Can Module :: Starter creare progetti XS? Può Modulo :: costruire o Dist :: Zilla costruire progetti XS? Le loro pagine pod tacciono sulla questione.

Il rovescio della medaglia, non la critica che è stata mossa al h2xs / EUMM applica ai progetti XS? Se avete bisogno di un compilatore C in ogni caso, è ragionevole esigere uno strumento make così?

EDIT: Vedo questo domanda risponde alla mia domanda sulla creazione di un progetto. Mi piace ancora di sapere circa la costruzione:? È EUMM l'unica opzione, o sono Module :: Build and Dist :: Zilla anche in grado di costruire XS

È stato utile?

Soluzione

Si scopre che Module :: Build è perfettamente in grado di compilare XS. Ecco una completa Build.PL sono riuscito a racimolare:

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;

Questo creerà una distribuzione con .h include i file (ad esempio ppport.h) nella directory include/, file di origine .c nella directory src/, e un file .xs corrispondente al pacchetto Chocolate::Belgian nella directory base del progetto.

extra_compiler_flags corrisponde a fare CCFLAGS, mentre extra_linker_flags corrisponde a LIBS (così si potrebbe desiderare -lm lì per collegare la libreria C per la matematica).

Altri suggerimenti

Dist :: Zilla è non un sostituto per EUMM o Module :: Genera, cosa che farà è di generare un Makefile.Pl (etc) per te, non sarei sorpreso di sentire che si può 't fare questo per un progetto di XS, ma ci sono modi di gestire il proprio per un progetto Dzil. Può funzionare con qualsiasi Makefile.Pl è dotato di (o Build.pl).

Quindi la mia risposta da parte Dist :: Zilla della tua domanda è, Dist :: Zilla non riempie quel ruolo in un progetto.

ho sempre basta usare un po 'abbastanza semplice distribuzione XS come punto di partenza. h2xs può fare un po 'della generazione XS per l'analisi di un colpo di testa, ma la maggior parte del tempo, ho scoperto che troppo limitato per essere utile.

Se hai intenzione di avvolgere C ++, si consiglia di dare un'occhiata al modulo :: :: Costruire WithXSpp.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top