2017-03-16 101 views
-2

這是我的Makefile,我得到一個錯誤「*** missing seperator stop」 我想編譯一個庫,但由於某種原因,我收到了這個錯誤信息。其他類似的SO問題表明這是一個問題,但我無法解決它。C Makefile - 缺少分隔符。停止

CC=g++ 
RANLIB=ranlib 

LIBSRC=osm.c 
LIBOBJ=$(LIBSRC:.c=.o) 

INCS=-I. 
CFLAGS = -Wall -g $(INCS) 
LOADLIBES = -L./ 

OSMLIB = libosm.a 
TARGETS = $(OSMLIB) 

TAR=tar 
TARFLAGS=-cvf 
TARNAME=ex1.tar 
TARSRCS=$(LIBSRC) Makefile README 

all: $(TARGETS) 

$(TARGETS): $(LIBOBJ) 
$(AR) $(ARFLAGS) [email protected] $^ //this line fails with the warning 
$(RANLIB) [email protected] 

clean: 
$(RM) $(TARGETS) $(OSMLIB) $(OBJ) $(LIBOBJ) *~ *core 

depend: 
makedepend -- $(CFLAGS) -- $(SRC) $(LIBSRC) 

tar: 
$(TAR) $(TARFLAGS) $(TARNAME) $(TARSRCS) 
+1

標籤在命令行開始處是必需的 – StoryTeller

+0

這裏哪些行需要製表符? – Sharonica

回答

0

使文件具有特定的結構和語法。通常:

<target> : <dependencies> 
<tab><instructions> 

該行開頭的選項卡是該語法的一部分。

2

Makefile要求規則中的所有「命令」都由一個選項卡縮進。

你有,例如,這個規則:

clean: 
$(RM) $(TARGETS) $(OSMLIB) $(OBJ) $(LIBOBJ) *~ *core 

這是不對的,命令行應預期與實際的標籤(不是空格),如

clean: 
    $(RM) $(TARGETS) $(OSMLIB) $(OBJ) $(LIBOBJ) *~ *core 
+0

謝謝,爲什麼我在Makefile中評論的特定行中出現錯誤? – Sharonica

+0

@Sharonica因爲它是*錯誤的第一個*。如果你解決了這個問題,而不是其他問題,那麼你將在下一個問題上出錯,依此類推。 –

+0

顯然問題是CLION的縮進作爲空格。這應該已經處理好了。 – Sharonica

2
CC=g++ 
RANLIB=ranlib 

LIBSRC=osm.c 
LIBOBJ=$(LIBSRC:.c=.o) 

INCS=-I. 
CFLAGS = -Wall -g $(INCS) 
LOADLIBES = -L./ 

OSMLIB = libosm.a 
TARGETS = $(OSMLIB) 

TAR=tar 
TARFLAGS=-cvf 
TARNAME=ex1.tar 
TARSRCS=$(LIBSRC) Makefile README 

all: $(TARGETS) 

$(TARGETS): $(LIBOBJ) 
    $(AR) $(ARFLAGS) [email protected] $^ //this line fails with the warning 
    $(RANLIB) [email protected] 

clean: 
    $(RM) $(TARGETS) $(OSMLIB) $(OBJ) $(LIBOBJ) *~ *core 

depend: 
    makedepend -- $(CFLAGS) -- $(SRC) $(LIBSRC) 

tar: 
    $(TAR) $(TARFLAGS) $(TARNAME) $(TARSRCS)