2016-09-17 138 views
0

我試圖建立一個新的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. 

人指出我做錯了什麼?

由於

+0

請注意,_make_將在執行任務之前展開'$(CC)= arm-linux-gnueabi-gcc'。在正常情況下'$ CC'是'cc',所以_make_執行'cc = arm-linux-gnueabi-gcc',我懷疑是你的意圖。 – bobbogo

回答

1

您需要ifeq和(/'/"之間的空格。

您的整個makefile可以簡化爲以下內容,使已經知道如何去做大部分你寫的東西。

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 
1

ifeq(托架缺失之間的空間。 GNU文檔解釋了語法here