make error(Windows):第1行:意外令牌附近的语法错误`,'

时间:2012-08-12 05:17:06

标签: shell syntax makefile syntax-error gnu-make

我是这个(make)的首发,并且在尝试grep文件中的文本时遇到了一些问题(作为Windows上make过程的一部分)。我试图解决的更大问题是检查给定目录中的所有二进制可执行文件是否都满足其各自的依赖项。我使用depends.exe(Dependency Walker)作为后面的部分,我正在尝试grep的输出文件,如果依赖性验证失败,可能会中止构建过程。

binary-dependency-validate:
for BINARYEXEC in $(shell $(PATH_TO_FIND_EXE) $(PRE_DEFINED_DIR) -name "*.exe"); do \
   $(PATH_TO_DEPENDS_EXE) /c /pb /ot $(PRE_DEFINED_DIR)/$$BINARYEXEC-depends.txt $(PRE_DEFINED_DIR)/$$BINARYEXEC ; \
   ifeq ($(shell $(PATH_TO_GREP_EXE) "Error: At least one required implicit or forwarded dependency was not found." $(PRE_DEFINED_DIR)/$$BINARYEXEC-depends.txt),); \
      @echo "Dependency ok" ; \
   endif ; \
done

我遇到以下错误:

line 1: syntax error near unexpected token `,'

任何建议都会有很大帮助。我查看了this帖子,并尝试在没有缩进的情况下对齐ifeq(这也没有帮助。)

2 个答案:

答案 0 :(得分:1)

问题是您正在将 Make 语言与 shell 语言混合使用。

makefile包含规则,规则包含由shell执行的命令:

target:
    first command
    second command

命令是shell语言,每个命令必须以TAB开头。

Make中有条件:

ifeq (foo, bar)
  VAR = something      
endif

(缩进仅适用于眼睛。)

各种脚本语言中也有条件:

if [ -f log ]
  then
    echo "log exists."
fi

Make条件可以在规则中包含命令:

target:
ifeq (foo, bar)
    first command
endif
    second command

Make将在运行规则之前评估此条件,并且ifeqendif之前必须没有TAB,因为Make不能将它们解释为要传递给shell的命令。

命令(在规则中)可以包含shell条件:

target:
    if [ -f log ]; \
  then echo "log exists." ; \
  fi

if之前的缩进是TAB。另一个空白是为了眼睛。

你的makefile在shell命令的中间有一个Make条件; Make无法在命令执行之前评估条件,并且shell无法理解Make语法。 您应该使用shell条件。

答案 1 :(得分:0)

似乎你在ifeq线上有一个迷路逗号

binary-dependency-validate:
for BINARYEXEC in $(shell $(PATH_TO_FIND_EXE) $(PRE_DEFINED_DIR) -name "*.exe"); do \
   $(PATH_TO_DEPENDS_EXE) /c /pb /ot $(PRE_DEFINED_DIR)/$$BINARYEXEC-depends.txt $(PRE_DEFINED_DIR)/$$BINARYEXEC ; \
   ifeq ($(shell $(PATH_TO_GREP_EXE) "Error: At least one required implicit or forwarded dependency was not found." $(PRE_DEFINED_DIR)/$$BINARYEXEC-depends.txt)); \
      @echo "Dependency ok" ; \
   endif ; \
done