2011-10-12 77 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驅動程序可以調用的庫。