【问题标题】:Syntax error: word unexpected (expecting ")")?语法错误:单词意外(期望“)”)?
【发布时间】:2014-01-20 05:36:34
【问题描述】:
PLATFORM = x86
CUD = cuda
X86 = x86
PAN = panda
ARM = arm

app: 
    ifeq($(PLATFORM),$(CUD))
CC = dum3
endif
ifeq($(PLATFORM), $(X86))
CC = gcc
endif
ifeq($(PLATFORM),$(PAN))
CC = dum1
endif
ifeq($(PLATFORM),$(ARM))
CC = dum2
endif


$(CC) -o ./Executable/list  ./Source/ll_main.c ./Library/liblst.a
./Executable/list

当我这样做时,它显示错误.... 语法错误:单词意外(应为“)”)?

请..帮助..

【问题讨论】:

    标签: makefile


    【解决方案1】:

    您的问题中的格式(makefile 和错误消息)太混乱了,无法确定,但我怀疑您的 ifeq 是用 TAB 缩进的。

    这是不对的; ifeq 是一个 make 命令。 (几乎)所有在 makefile 中以 TAB 字符作为第一个字符的行都会传递给 shell。 shell 对ifeq 一无所知,因此,根据您的 shell,可能会打印出类似的错误。

    您应该将 ifeq 块之后的 app: 目标移动到使用 $(CC) 之前(并确保 $(CC) ... 行以 TAB 作为该行的第一个字符缩进)。

    以后请务必使用 SO 的格式化功能,在提问时务必准确剪切和粘贴错误消息,以及前后几行上下文。

    【讨论】:

    • 我刚遇到这个。在 ifeq 或 Makefile 语句之前不要有硬制表符(或空格)。缺少缩进的代码看起来很难看,但它解决了这个问题。
    • 您可以在ifeq 或其他 Makefile 语句之前使用空格。只有真正的 TAB 作为该行的第一个字符可能会导致问题。但是我不同意代码看起来“丑陋”;事实上,将 makefile 语句缩进到与配方行相同的级别是非常具有误导性的;这意味着它们显然不是 shell 命令。但你可以缩进 4 个空格或类似的东西。
    【解决方案2】:

    我也有这个错误,在我的情况下是 gcc 本身,或者我自己更好:我已经为 linux 下载了一个 linux gcc,但它是一个 80386 程序,我的 linux 在 ARM 系统上运行。尝试完全按照您的 makefile 中的说明调用 gcc。如果您收到错误提示该文件不是可执行文件,那么您就会知道。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-26
      • 2019-03-27
      • 2014-10-21
      • 1970-01-01
      • 2022-09-23
      • 2016-10-18
      • 1970-01-01
      • 2018-06-23
      相关资源
      最近更新 更多