Подтвердить что ты не робот

Ошибки в файле make: *** отсутствующий разделитель. Стоп

Я сталкиваюсь с ошибками в файле make в CentOS 6.02 64 бит. Мне нужно знать, что нужно сделать, чтобы makefile был работоспособным. Любое предложение будет очень полезно. Мой файл будет вставлен ниже: -

#



.SUFFIXES: .cc $(.SUFFIXES)



ALL = libpal.a



#all = $(ALL)

all: $(ALL)



.cpp.o:

            $(C++) -o [email protected] -c $(PROF) $(CFLAGS) $*.cpp

.cc.o:

            $(C++) -o [email protected] -c $(PROF) $(CFLAGS) $*.cc

.c.o:

            $(CC) -o [email protected] -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

#The previous line had "gcc" instead of "frv-uclinux-gcc"

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)

И получившаяся ошибка:

Makefile:34: *** missing separator.  Stop.
4b9b3361

Ответ 1

Вы можете найти объяснение этой ошибки в Приложение B Ошибки, созданные с помощью Make.

Каждая строка в рецепте должна начинаться с символа табуляции. Рецепты, начинающиеся с $(C++) и $(CC) в верхней части вашего файла, похоже, не начинаются с символа табуляции.

Кроме того, раздел

INCLUDE = \
    -I./usr/include/sys
    -I./Headers \
Кажется, что

отсутствует обратная косая черта после sys, а в том же разделе (и многом другом) есть лишние пустые строки.

Ответ 2

Откройте свой файл make в vim, а не в редакторах, таких как gedit. Каждая строка в рецепте должна начинаться с символа табуляции.

Ответ 3

Этот ответ для других Make новичков, таких как я, которые находят этот вопрос из Googling и застревают, потому что они изменяют большой ранее существующий Makefile, без строк, начинающихся с символа пробела. Моя проблема возникла из-за того, что make файл в подкаталоге с пробелами вместо вкладок вызывался родительским make файлом, где я ошибочно считал, что проблема существует.

Как только я исправил make файл в подкаталоге, все работало как шарм.

Ответ 4

Чтобы добавить к ответам выше, иногда их легче забыть, но если в настройках вашего редактора вы включили "расширение вкладок в пробелы" (в vim "set expandtab" в .vimrc), вы получите эту ошибку, Для vim вы можете временно set noexpandtab, и он должен решить проблему. Для других редакторов вам, возможно, придется перейти к их настройкам и т.д.