我在构建代码时遇到了错误。
/bin/sh: -c: line 0: syntax error near unexpected token `testk,x86_64'
/bin/sh: -c: line 0: `ifeq (testk,x86_64)'
代码:
define temp
mkdir -p $(@D)
ifeq ($(MACH),x86_64)
env PERLLIB=/usr/lib/perl5/site_perl/5.10.0 --test $<
else
env PERLLIB=/usr/ex-lib/perl5/site_perl/5.10.0 --test $<
endif
endef
我发现我们需要在make文件中的'if'语句之前删除缩进。我做了同样的事,仍然面临着这个问题。如果我做错了什么,请你纠正我。
我正在以下列方式使用'temp'。
$(TGT64)/$(SETUP): $(TGT64)/$(GEN_K)_gen
$(temp)
这里我试图检查平台并相应地设置环境。在'define temp'我检查具有平台信息的MACH变量内容。
我玩代码并进行以下更改。
define temp
mkdir -p $(@D)
@ifeq ($(MACH),x86_64); then env PERLLIB=/usr/lib/perl5/site_perl/5.10.0 $<; \
@else \
@env PERLLIB=/usr/ex-lib/perl5/site_perl/5.10.0 $<; \
@fi
endef
这次我正面临着。
/ bin / sh:-c:第1行:语法错误:意外的文件结束问题。
答案 0 :(得分:1)
在我们向您提供帮助之前,您必须向我们展示您是如何使用这个已定义的变量temp
。只显示变量的内容不会有帮助。
我希望您尝试在配方中使用变量,例如:
foo:
$(temp)
你不能这样做:食谱的内容必须是一个shell脚本;食谱被传递给要执行的shell。您已定义的temp
的内容包含makefile构造,shell不知道任何内容,因此您的shell语法错误。
此外,配方中的每一行都传递给一个单独的shell,因此您的行env FOO = bar
无效:一旦调用该行,shell就会退出,并且对其环境的所有更改都将丢失。
这里的例子不足以让我们推荐一个可行的策略:你还没告诉我们你想要完成什么。
ETA 我上面的回答仍然是正确的。看起来您试图将变量转换为包含if语句的shell脚本语法,但没有完成作业:ifeq
是makefile语法而不是shell语法。在shell中,您必须使用if
。像这样:
@if [ '$(MACH)' = x86_64 ]; then ...
但是,请重新阅读上面关于设置环境变量的评论...您在此处显示的配方根本不会产生任何影响,即使它不再出现语法错误。