/ bin / sh:1:语法错误:单词意外(期待“)”)

时间:2017-06-05 16:56:22

标签: makefile gnu-make

我有Makefile

TMP_DIR := tmp
RUN_OR_NOT := $(shell date '+%y%m%d%H%M')

all: version

version:
    ifeq ($(shell test -d ${TMP_DIR} && echo -n "yes";),yes)
        $(shell echo ${TMP_DIR} already exists ...)
    else
        $(shell mkdir -p ${TMP_DIR})
    endif

我想首先检查目录tmp是否存在,如果它不存在则仅创建它。这有效,但有一个奇怪的错误:

 ifeq (yes,yes)
 /bin/sh: 1: Syntax error: word unexpected (expecting ")")
 Makefile:7: die Regel für Ziel „version“ scheiterte
 make: *** [version] Fehler 2

为什么会出现这个奇怪的/bin/sh: 1: Syntax error: word unexpected (expecting ")")错误?以及如何解决这个问题?

2 个答案:

答案 0 :(得分:6)

在makefile中,配方是一个shell脚本。您正尝试将ifeq等make构造放入您的食谱中。 Make会将它们传递给shell,shell会抛出此错误,因为它不了解makefile语法。

您应该使用shell脚本编写配方,而不是使用makefile语法:

version:
        if test -d ${TMP_DIR}; then \
            echo ${TMP_DIR} already exists ...; \
        else \
            mkdir -p ${TMP_DIR}; \
        fi

虽然为什么你关心目录是否存在但我不知道;我个人只会使用:

version:
        mkdir -p ${TMP_DIR}

答案 1 :(得分:0)

由于问题仍未得到解答,

您在该行之后放置了一个制表符 -> version:(在 ifeq 之前)。尝试在那里使用空间。 Makefile 中以 TAB 字符开头的行将传递给 Shell。 以下链接提供了有关其工作原理的确切答案。

Syntax error: word unexpected (expecting ")")?