7

私は最近、perlxstutを使用して XS の学習を開始しました。チュートリアルでは、 ExtUtils::MakeMakerベースのプロジェクトを作成するために、古いh2xsツールを使用してモジュールを作成することを提案しています。ただし、純粋な Perl プロジェクトの場合、 h2xs/EUMM はModule::InstallModule::BuildまたはDist::Zillaを支持して長い間好まれていませんでした。

XS プロジェクトを作成するためのより現代的な方法はありますか? Module::Starterは XS プロジェクトを作成できますか? Module::Build または Dist::Zilla は XS プロジェクトをビルドできますか? 彼らのポッドページはこの問題について沈黙しています。

反対に、h2xs/EUMM で平準化された批判は XS プロジェクトにも当てはまりますか? とにかく C コンパイラが必要な場合、make ツールも要求するのは理にかなっていますか?

編集:この質問は、プロジェクトの作成に関する私の質問に答えています。ビルドについて知りたいのですが、EUMM が唯一のオプションですか、それとも Module::Build と Dist::Zilla も XS をビルドできますか?

4

3 に答える 3

4

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_flagsmakeCCFLAGSに対応しますが、にextra_linker_flags対応しLIBSます (そのため-lm、C 数学ライブラリをリンクする必要がある場合があります)。

于 2010-08-28T21:18:25.147 に答える
2

Dist::ZillaはEUMMまたはModule::Buildの代わりではありませんMakefile.Pl。それが行うことは、 (など)を生成することです。XSプロジェクトではこれができないと聞いても驚くことではありませんが、 dzilプロジェクトのためにあなた自身を管理する方法です。Makefile.Pl提供されているもの(またはBuild.pl)で動作します。

ですから、あなたの質問のDist :: Zillaの部分についての私の答えは、Dist::Zillaはプロジェクトでその役割を果たしていないということです。

于 2010-08-28T11:41:43.550 に答える
1

私は常に、かなり単純な XS ディストリビューションを出発点として使用しています。h2xs はヘッダーを解析することで XS 生成の一部を行うことができますが、ほとんどの場合、それはあまりにも限定的すぎて役に立たないことがわかりました。

C++ をラップする予定がある場合は、Module::Build::WithXSpp を参照してください。

于 2010-08-28T18:25:43.493 に答える