【问题标题】:Makefile:Missing SeparatorMakefile:缺少分隔符
【发布时间】:2016-09-17 07:52:07
【问题描述】:

我正在尝试构建一个新的 makefile,但我遇到了错误,相同的 makefile 的代码如下:

ifeq($(ARCH),bbb)
    $(CC)=arm-linux-gnueabi-gcc
else ifeq($(ARCH),frdm)
    $(CC)=arm-none-eabi-gcc
else
    $(CC)=gcc
endif

CFLAGS=-c
CFLAG=-o

all:memory.o data.o proj_1.o main.o
    $(CC) memory.o data.o proj_1.o main.o  $(CFLAG) main

main.o: main.c
    $(CC) main.c $(CFLAGS)

memory.o: memory.c
$(CC) memory.c $(CFLAGS)

data.o:data.c
    $(CC) data.c $(CFLAGS)

proj_1.o:proj_1.c
    $(CC) proj_1.c $(CFLAGS)

clean: 
    rm -rf *o

错误信息是

test.mk:1: *** missing separator.  Stop.

谁能指出我做错了什么?

谢谢

【问题讨论】:

  • 请注意,make 将在执行分配之前扩展$(CC)=arm-linux-gnueabi-gcc$CC 在正常情况下是 cc,所以 make 执行 cc = arm-linux-gnueabi-gcc,我怀疑这是你想要的。

标签: ubuntu makefile gnu-make


【解决方案1】:

ifeq 和 ( / ' / " 之间需要一个空格。

您的整个 makefile 可以简化为以下内容,make 已经知道如何执行您编写的大部分内容。

ifeq ($(ARCH),bbb)
prefix := arm-linux-gnueabi-
else ifeq ($(ARCH),frdm)
prefix := arm-none-eabi-
endif

CC := $(prefix)$(CC)

objects := memory.o data.o proj_1.o main.o

main: $(objects)
clean: ; $(RM) $(objects) main

【讨论】:

    【解决方案2】:

    ifeq( 括号之间的空格缺失。 GNU 文档解释了here 的语法。

    【讨论】:

      猜你喜欢
      • 2011-03-19
      • 1970-01-01
      • 2012-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-16
      • 2016-10-04
      相关资源
      最近更新 更多