make文件中的错误:***缺少分隔符.停止

Nas*_*man 37 linux makefile centos

我在CentOS 6.02 64位的make文件中遇到错误.我需要知道应该怎么做才能使makefile可行.任何建议都会有很大帮助.我的make文件粘贴在下面: -

#



.SUFFIXES: .cc $(.SUFFIXES)



ALL = libpal.a



#all = $(ALL)

all: $(ALL)



.cpp.o:

            $(C++) -o $@ -c $(PROF) $(CFLAGS) $*.cpp

.cc.o:

            $(C++) -o $@ -c $(PROF) $(CFLAGS) $*.cc

.c.o:

            $(CC) -o $@ -c $(PROF) $(CFLAGS) $*.c



top_srcdir = ..

OPENSSL_LIB_DIR = ../../ThirdPartyLibs/openssl-0.9.8e/include
BOOST_DIR = ../../ThirdPartyLibs/boost/stage/lib

BOOST_INCLUDE_DIR = ../../ThirdPartyLibs/boost





CC = gcc

C++ = g++

CCOPT = -Os -Wall -Wno-deprecated

CCOPT_DEBUG = -Wall -g -Wno-deprecated

PROF = 



STATIC = -static





INCLUDE = \
 -I./usr/include/sys

 -I./Headers \

 -I$(top_srcdir)/PAL/Headers \

 -I$(top_srcdir)/BaseMulti/Headers \

 -I$(top_srcdir)/NetworkMulti/Headers \

 -I$(top_srcdir)/RTP/Headers \

 -I$(BOOST_INCLUDE_DIR) \

 -I$(OPENSSL_LIB_DIR) \



LIBDIRS = \

    -L$(BOOST_DIR) \





#XXX NLAYER define / MB_DEBUG

DEFINE =  -D_LINUX -DDEBUGLOG -D_INDENT_DB_PRINT -fsigned-char -fno-inline -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS -D_POSIX_PER_PROCESS_TIMER_SOURCE -D_PTHREADS -DUNICODE #-DDISABLE_LOG



SHLIB_SUFFIX   = .so

SHLIB_LD       = gcc -shared

SHLIB_LD_LIBS  = 

SHLIB_CFLAGS   = -fPIC



BFLAGS = $(DEFINE) $(INCLUDE)

CFLAGS = $(CCOPT) $(BFLAGS)



OBJ_C =



OBJ_CC = \

    ./Sources/PALsystime.o \

    ./Sources/PALdebug.o \

    ./Sources/PALdebuglog.o \

    ./Sources/PALthread.o \

    ./Sources/PALcritsec.o \

    ./Sources/PALprofiler.o \

    ./Sources/PALserializable.o \

    ./Sources/PALinet.o \

    ./Sources/PALnetwork.o \

    ./Sources/PALsocket.o \

    ./Sources/PALlocalhostUdpEvent.o \

    ./Sources/PALpollarray.o \

    ./Sources/PALrandom.o \



OBJS = $(OBJ_C) $(OBJ_CC) 



SRCS = $(OBJ_C:.o=.c) $(OBJ_CC:.o=.cc)



debug: DEFINE += -DDEBUG

debug: BFLAGS = $(DEFINE) $(INCLUDE)

debug: CFLAGS = $(CCOPT_DEBUG) $(BFLAGS)

debug: $(OBJS)

    ar crsu libpal_debug.a $(OBJS)



libpal.a: $(OBJS)

    ar crsu libpal.a $(OBJS)



cleandeps:  

    $(RM) ./Sources/*.o .depend* core



clean: cleandeps    

    $(RM) ./libpal.a ./libpal_debug.a

    $(RM) $(ALL)
Run Code Online (Sandbox Code Playgroud)

结果错误是:

Makefile:34: *** missing separator.  Stop.
Run Code Online (Sandbox Code Playgroud)

Rei*_*eek 49

您可以在附录B由Make生成的错误中找到此错误的说明.

配方中的每一行都必须以制表符开头.从文件顶部开始$(C++)$(CC)靠近文件顶部的食谱似乎不以制表符开头.

另外,该部分

INCLUDE = \
    -I./usr/include/sys
    -I./Headers \
Run Code Online (Sandbox Code Playgroud)

似乎缺少一个反斜杠后sys,相同的部分(以及更多)有多余的空行.


Ani*_*kur 26

在vim中打开make文件,而不是像gedit这样的编辑器.配方中的每一行都必须以制表符开头.

  • +1简单直接.并且*当然*我将我的vim配置为使用两个空格(0x20)而不是选项卡.不得不查找一个ASCII表来查找相关的控制字符(0x09,或^ I,因为'我'是字母表中的第9个字符).因此对于处于类似情况的其他任何人来说,在插入模式下,在vim中插入选项卡的简单方法是通过^ V ^ I(Ctrl-V,Ctrl-I).此外,我不得不问你强迫你使用标签是谁的*精彩*的想法.即使python对空白也不严格:P (7认同)

ent*_*erd 7

这个答案适用于Make像我这样的其他新手,他们从谷歌搜索中找到这个问题而被卡住,因为他们正在修改一个大的预先存在的Makefile,没有以空格字符开头的行.我的问题发生的原因父目录调用了一个带有空格而不是制表符的子目录中的 makefile,我错误地认为存在问题.

一旦我在子目录中修复了makefile,一切都像魅力一样.