2012-09-04 112 views
3

我正在編譯一個MinGW系統的Xindy。 dmake總是死於一個錯誤,我已經縮小到Makefile中的幾行。嘗試在此運行的dmake:dmake中的shell命令添加了'/ S'

SHELL = /bin/sh 
some-target: 
    target=`echo info-recursive | sed s/-recursive//`; 

如果您使用的是常規的Windows CMD,而不是MinGW的殼,你必須改變位置的SHELL變量指向的東西,如「C:/ MinGW的/ MSYS/1.0/sh.exe」。無論如何,上述失敗與:

CreateProcess failed (2). 
dmake: Error executing 'bin/sh /S /c "target=`echo info-recursive | sed s/-recursive//`;"': No such file or directory 
dmake: Error code -1, while making 'some-target' 

Sed和sh安裝,他們工作正常。當我嘗試通過自身運行指定的命令由錯誤信息輸出,我得到這個:

$ /bin/sh /S /c "target=`echo info-recursive | sed s/-recursive//`;" 
/bin/sh: /S: No such file or directory 

如此看來,dmake的(或其它)被添加「/ S/C」,到shell參數,bash認爲它是一個文件名,然後在找不到它時失敗。

有沒有人有這方面的經驗或知道我可以解決這個問題?

+0

通常,'bash'或'sh'選項必須以' - '開頭,所以'/ bin/sh -S -c「...」''預計會。我根本不瞭解MinGW,所以我不能說誰是錯。 – chepner

+0

'/'而不是' - '不會讓我感到驚訝,因爲很多Windows程序都這麼做(儘管我不贊同) –

+0

是的,我沒有任何實踐經驗可以說「dmake是調用/ bin/sh錯誤「,雖然這將是我的第一個猜測。 – chepner

回答

2

的dmake源代碼的簡單檢查表明,問題是,$(SHELL)被設置爲時已晚,仍處於啓動時間空(macros.mk 37行):

11 .IF $(SHELL) == $(NULL) 
... 
15  SHELL *:= $(COMSPEC) 
... 
... 
35 .IF $(SHELL) == $(COMSPEC) 
36 .IF $(COMSPEC:lf) == cmd.exe 
37  SHELLFLAGS  *:= $(SWITCHAR)S $(SWITCHAR)c 

您可以通過在您的dmake命令行調用中添加SHELL="C:/MinGW/msys/1.0/sh.exe"來解決此問題。

(我很多年都沒有使用過dmake,所以可能會在這裏弄錯,但是如果你能得到像自動配置的makefile與dmake一樣的工具,我會留下深刻的印象,它與IIRC的風格有些不同。可能更容易找到一個GNU 使或類似。)

+0

是的,這似乎解決了眼前的問題,之後許多人突然冒出來。我曾認爲MinGW帶來了dmake,而不是(我感覺很傻),所以我正在重試MinGW的做法,而且看起來會更好。 –