我有这个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
Run Code Online (Sandbox Code Playgroud)
我想首先检查目录是否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
Run Code Online (Sandbox Code Playgroud)
为什么会出现这个奇怪的/bin/sh: 1: Syntax error: word unexpected (expecting ")")错误?以及如何解决这个问题?
在makefile中,配方是一个shell脚本.你试图将make构造ifeq放入你的食谱中.Make会将这些传递给shell,shell会抛出此错误,因为它不了解makefile语法.
您应该使用shell脚本编写配方,而不是使用makefile语法:
version:
if test -d ${TMP_DIR}; then \
echo ${TMP_DIR} already exists ...; \
else \
mkdir -p ${TMP_DIR}; \
fi
Run Code Online (Sandbox Code Playgroud)
虽然为什么你关心目录是否存在我不知道; 我个人只会用:
version:
mkdir -p ${TMP_DIR}
Run Code Online (Sandbox Code Playgroud)