Оказывается, что 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).