这是我的Makefile,我得到一个错误“***丢失seperator.stop”我正在尝试编译一个库,但是由于某种原因我得到了这个错误消息。其他类似的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)
Makefile要求一个规则中的所有“命令”按一个选项卡缩进。
例如,您有以下规则:
clean:
$(RM) $(TARGETS) $(OSMLIB) $(OBJ) $(LIBOBJ) *~ *core
这是错误的,命令行应该使用一个实际的制表符(而不是空格),如
clean:
$(RM) $(TARGETS) $(OSMLIB) $(OBJ) $(LIBOBJ) *~ *core
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)
使文件具有特定的结构和语法。一般来说:
<target> : <dependencies>
<tab><instructions>
行开头的选项卡是语法的一部分。