制作:意外的令牌错误

时间:2018-06-12 18:05:51

标签: makefile gnu-make

我在构建代码时遇到了错误。

/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行:语法错误:意外的文件结束问题。

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 ...

但是,请重新阅读上面关于设置环境变量的评论...您在此处显示的配方根本不会产生任何影响,即使它不再出现语法错误。