0

syntax error: unexpected end of file当我运行 make clean 时,我得到了。

当我删除导致错误的变量周围的括号时,我成功地摆脱了该错误。

我想知道为什么会这样。

我在用:

  • 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

==================================================== =============

更新:

这是实际的代码:

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 的最新版本,看看问题是否仍然存在。

4

1 回答 1

1

看起来您分配了一个值$T而不是$(TARGET)

与 bash 不同,in make$仅适用于下一个字符或括号内的表达式。因此 ' $TARGET' 解析为 ' $T' 加上文字 ' ARGET' 的扩展......为了说明,请考虑以下内容:

X := _X_
XX := _YY_
$(info - $XX -)
$(info - $(XX) -)

你得到:

- _X_X -
- _YY_ -

希望有帮助。

于 2016-12-01T16:01:45.897 回答