2012-07-09 128 views
2

我使用ExtUtils :: MakeMaker來分發我的perl模塊,它由一個PM文件和一個可執行文件組成。ExtUtils :: MakeMaker如何安裝配置文件

可執行文件必須加載配置文件。

我希望我的Makefile.PL到:

  • 生成配置文件;
  • 將其安裝在正確的PREFIX中;
  • 修改可執行文件以設置配置文件的實際路徑。

但我不知道如何做到這一點。

+0

如果代碼在沒有配置文件的情況下運行,那麼使您的代碼回落到合理的默認行爲。如果它所需要的信息不是以某種方式傳遞,而是要求它特定在文件中聽起來討厭,那麼該工具可能會死亡。 – tripleee 2012-07-09 08:43:58

+0

配置文件僅存儲setuid/setgid的用戶/組,默認情況下,程序將其設置爲nobody:nobody。無論如何,該程序必須加載配置文件,並且我不知道如何設置真正的路徑(PREFIX/etc/...) – linkdd 2012-07-09 08:49:59

回答

3

這是製作者真正痛苦的地方。你必須知道如何在make中做到這一點。

首先,Makefile.PL只是一個Perl程序,所以你可以做任何你想做的事情。

其次,您可以使用一個.PL文件作爲運行以生成真實文件的程序。例如,你可以有一個lib/Module.pm.PL。在構建時,系統運行該程序並使用輸出創建blib/lib/Module.pm。請參閱PL_FILES的文檔。

第三,您可以將任務添加到make目標,以便您的處理在正確的時間發生。雙冒號目標添加到已定義的任務中。

all :: 
     perl create_config.pl > config.pl 
     install ... config.pl 

爲了這個從Makefile.PL添加到的Makefile,你有特殊的子程序添加到MY命名空間。這些都記錄在Makemaker中,但文檔假定您對make感到滿意。

但是,即使你知道如何去做,所有這些都是屁股疼痛。你認爲你已經想通了,然後有人有不同的設置或不同種類的make。你花費你所有的時間在各個地方使其兼容。這是Perl神的發明Module::Build的主要原因之一。添加自定義處理和修改構建目標變得更加容易,您可以在Perl中完成所有這些工作,如!根據經驗,如果您不知道如何使用Makemaker來做,那麼可以使用Module::Build

+0

我使用Module :: Build,感謝你。這更容易。我現在可以將默認配置文件安裝在正確的目錄中。但我無法弄清楚如何在我的可執行文件中設置配置文件的真實路徑。直接在Build.PL中進行修改?或者我必須定義一個PL_files? – linkdd 2012-07-11 09:40:06

+0

我解決了這個問題:在Build中。PL我創建了一個名爲'config'的INI文件(這不是問題,因爲我的模塊需要Config :: IniFiles),並且在一個文件(設置在PL_files中)中,我從該INI文件獲取值並正確生成腳本 – linkdd 2012-07-11 14:04:11