C Makefile - 缺少分隔符。停

时间:2017-03-16 10:24:17

标签: c makefile

这是我的Makefile,我收到错误“***缺少分隔符。停止” 我正在尝试编译库但由于某种原因我收到此错误消息。其他相似的SO问题表明它是一个标签问题,但我无法解决它。

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) $@ $^ //this line fails with the warning
$(RANLIB) $@

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

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

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

3 个答案:

答案 0 :(得分:4)

Makefile要求所有"命令"在一个规则中缩进一个标签。

例如,您有这条规则:

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

这是错误的,命令行应该与实际的标签(而不是空格)一样,如

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

答案 1 :(得分: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) $@ $^ //this line fails with the warning
     $(RANLIB) $@

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

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

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

答案 2 :(得分:0)

make文件具有特定的结构和语法。一般为:

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

该行开头的标签是语法的一部分。