2011-10-12 91 views
1

我,我想有两个后端,一个模块上工作一个Module(::PerlArray)Module::PDL(其中可以将取决于Module)。两者都需要访问functions.c/.h文件进行构建。该文件具有模块所需的相当复杂的逻辑。不是将它与每个模块分开分发,有没有办法将它与系统上的Module::PP保持一致,然后将它添加到EU::MMM::B中的适当构建标志(考虑到这里的复杂性可能是后者)?perl的建立与C源代码模块,其他模块

为了更直观地

--Module-- 
Module.pm 
Module/PerlArray.pm 
Module/PerlArray.xs (#include functions.h 
       #include perlarray_backend.h) 
Module/src/functions.c 
Module/src/perlarray_backend.c 
Module/inc/functions.h 
Module/inc/perlarray_backend.h 

--Module::PDL-- 
Module/PDL.pm 
Module/PDL.xs (#include functions.h /*from Module*/ 
       #include pdl_backend.h) 
Module/src/pdl_backend.c 
Module/inc/pdl_backend.h 

和编译使得functions.o和链接。我确定我可以弄清楚如何正确设置标志,但是如何在安装时让Module保留functions.c文件,以及如何在安装Module::PDL时找到它?有没有我可以放置的地方functions.c/.h

+1

PP模块应该保留给纯Perl(这是约定),所以它不应该依赖于。[ch]文件。 –

+0

的确如此,我会在命名上工作。我的pp(正如我所说的那样)使用Perl本地数组与vs使用PDL,但你是对的,如果它使用XS,我不应该称它为PP。 –

回答

0

模块应该可以独立安装。也就是说,如果我已经安装了必备的Perl模块(但不一定仍然处于源代码形式),那么应该可以将所有模块安装在一个分布式tar文件中,而无需参考任何其他模块的源代码。

您有选择。一种方法是让一个源目录创建多个分布式tar文件,并且每个文件都可以在分布式源文件中拥有共享的function.[ch]的副本。

另一个主要的选择是将两个模块捆绑成一个分布式焦油球。

+0

尽管我大致上同意你的说法,但我想这样做的原因是PDL是一个巨大而烦人的安装链,它提供的所有模块都是一个更清洁的数据存储单元。我不认为我的'Module'的所有(预期的)用户都会想要也不需要PDL的头疼。有一个更小的社区会受益,对他们来说,为什么要构建一个大型的'SV *'阵列,以便他们最终可以转换为PDL对象。因此,由于'Module :: PDL'将取决于'Module'并且无论如何都不能单独安装,所以我认为这种情况可以起作用。 –

1

你看过DBI吗?它按照你的建议进行:它安装一些.h文件,DBD驱动程序可以在它们的XS代码中包括#以及一个DBD驱动程序可以调用的库。