2013-08-05 87 views
1

我有一個用於Perl模塊安裝的Makefile,我試圖讓腳本安裝正常工作。它是由Makefile.PL生成的,但模塊的作者告訴我,如果我弄清楚Makefile應該是什麼樣子,那麼他可以修復Makefile.PL。無論如何,我正在爲Windows 7上的作者測試它,並且它不合時宜。問題是,看起來像以下目標:makefile分號解釋爲命令參數

pure_perl_install :: all 
$(NOECHO) $(PERLRUN) -pi.bak -e "s+^use FindBin;.*++" $(INST_SCRIPT)/dtdto ; \ 
    $(PERLRUN) -pi.bak -e "s+^my \$$share =[^;]*+my \$$share = qq{$(INSTALLSHAREDIR)}+" $(INST_SCRIPT)/dtdto ; \ 
    $(CHMOD) $(PERM_RWX) $(INST_SCRIPT)/dtdto 

dmake pure_perl_install產生如下:

C:\strawberry\perl\bin\perl.exe -MExtUtils::Command -e cp -- bin/dtdto blib\script\dtdto 
pl2bat.bat blib\script\dtdto 
Can't open ;: No such file or directory, <> line 297. 
Can't open -pi.bak: No such file or directory, <> line 348. 
Can't open -e: No such file or directory, <> line 348. 
Can't open s+^my \$share =[^;]*+my \$share = qqC:\strawberry\perl\site/share+: Invalid argument, <> line 348. 
Can't open ;: No such file or directory, <> line 645. 
Can't do inplace edit on C:\strawberry\perl\bin\perl.exe: File exists, <> line 645. 
Can't open -MExtUtils::Command: Invalid argument, <> line 645. 
Can't open -e: No such file or directory, <> line 645. 
Can't open chmod: No such file or directory, <> line 645. 
Can't open --: No such file or directory, <> line 645. 
Can't open 755: No such file or directory, <> line 645. 
Access is denied. 
dmake: Error code 129, while making 'pure_perl_install' 

我認爲問題出在第一個錯誤。分號應該在Makefile中用來表示單個命令的結束。然而,分號反而被解釋爲另一個命令參數,並且所有的行都變成了一個長命令。然後覆蓋perl.exe(創建備份後,謝天謝地!),然後嘗試運行perl.exe,這現在是不可能的,並且會彈出一條消息,說perl.exe甚至不是真正的程序。這是一場完全的災難。

我的問題是:如何編輯此目標,以便將分號解釋爲dmake中的結束命令,而不是作爲另一個命令行參數發送?

順便說一句,刪除分號之前的空格作爲dtdto文件名的一部分,這會導致錯誤,因爲它不存在。

+1

您應該通過刪除'$(NOECHO)'(這大概擴展爲'@'),讓您和我們可以看到,擴展到所有的東西開始。 –

回答

0

或許可以避開 「;」完全在makefile規則中使用多行:

pure_perl_install :: all 
    $(NOECHO) $(PERLRUN) -pi.bak -e "s+^use FindBin;.*++" $(INST_SCRIPT)/dtdto 
    $(NOECHO) $(PERLRUN) -pi.bak -e "s+^my \$$share =[^;]*+my \$$share = qq{$(INSTALLSHAREDIR)}+" $(INST_SCRIPT)/dtdto 
    $(NOECHO) $(CHMOD) $(PERM_RWX) $(INST_SCRIPT)/dtdto