我是这个(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(这也无济于事。)
最佳答案
问题是您将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
生成条件可以将命令包含在规则中:
target:
ifeq (foo, bar)
first command
endif
second command
Make将在运行规则之前评估此条件,并且
ifeq
或endif
之前不得有TAB,因为Make一定不能将它们解释为要传递给 shell 程序的命令。命令(在规则中)可以包含一个条件 shell :
target:
if [ -f log ]; \
then echo "log exists." ; \
fi
if
之前的缩进是TAB。另一个空格是眼睛。您的makefile在shell命令中间有一个Make条件。 Make在执行命令之前无法评估条件,并且Shell无法理解Make语法。您应该使用有条件的 shell 程序。
关于shell - 出错(Windows): line 1: syntax error near unexpected token `,' ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11919904/