我有一個用於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
文件名的一部分,這會導致錯誤,因爲它不存在。
您應該通過刪除'$(NOECHO)'(這大概擴展爲'@'),讓您和我們可以看到,擴展到所有的東西開始。 –