當我運行make clean時,我得到了syntax error: unexpected end of file
。當存在括號時,makefile中的變量會導致意外的文件結尾
當我刪除導致錯誤的變量的括號時,我成功地擺脫了該錯誤。
我想知道爲什麼會發生這種情況。
我使用:
- 的Windows XP SP2 64位
- CYGWIN
- KSH R48
我的變量稱爲TARGET
,是這樣的,但程較長:
./ShowEnumContentsPrefAPI.o ./ShowEnumsPrefAPI.o
當錯誤發生的路線是:
rm -f $(TARGET)
當我刪除了括號中的錯誤不見了,它的工作:
rm -f $TARGET
另一條線,以及爲:
if [ "$(TARGET)" != "" ]; then \
當我刪除了括號中的錯誤不見了,它的工作:
if [ "$TARGET" != "" ]; then \
============================ ==================================
- 這裏發生了什麼?
- 如何在不更改導致錯誤的每一行的情況下防止發生這種情況(本makefile中有超過1000行)?
- 這是如何工作
mks 5.2 sh.exe
並且不會在cygwin ksh
上工作?
============================================ ==================
UPDATE:
這是實際的代碼:
clean:
if [ "$TARGET" != "" ]; then \
rm -rf $(TARGET); \
fi
這就是產生的錯誤syntax error: unexpected end of file
:
clean:
if [ "$(TARGET)" != "" ]; then \
rm -rf $(TARGET); \
fi
唯一的區別是圍繞目標的括號。
做好
echo "T:$T"; \
echo "TARGET:$TARGET"; \
生產
T:
TARGET:ARGET
echo "(TARGET):$(TARGET)";\
再次產生的syntax error: unexpected end of file
。
今天我試着切斷了一些TARGET變量。故意手工縮短,rm -f $(TARGET)
工作正常。我懷疑這是cygwin的問題rm
,[
exes。我會嘗試升級到cygwin的最新版本,看看問題是否存在。
我明白你的意思了。但是我發生在我身上的是相反的情況。而令人懷疑的是,我在文件的其他地方使用了$(),並且它工作正常。非常感謝。 –
您必須發佈更完整的代碼 - 具體說明TARGET是如何設置的,以及更多關於它被引用位置的上下文(我假設它在配方中,如果它位於Makefile外調用的shell腳本中,然而,那是一個完全不同的問題)。 – John
是的,它在配方中。我很抱歉,我會盡快更新問題。感謝幫助。 –