web-dev-qa-db-fra.com

Erreurs dans le fichier make: *** séparateur manquant. Arrêtez

Je fais face à des erreurs dans le fichier make dans CentOS 6.02 64 bits. J'ai besoin de savoir ce qui devrait être fait pour rendre le makefile réalisable. Toute suggestion sera très utile. Mon fichier make est collé ci-dessous: -

#



.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)

Et l'erreur résultante est:

Makefile:34: *** missing separator.  Stop.
37
Naseef Ur Rahman

Vous pouvez trouver une explication de cette erreur dans Annexe B Erreurs générées par Make .

Chaque ligne d'une recette doit commencer par un caractère de tabulation. Les recettes commençant par $(C++) et $(CC) en haut de votre fichier ne semblent pas commencer par un caractère de tabulation.

De plus, la section

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

semble manquer une barre oblique inverse après sys et cette même section (et bien d'autres) a des lignes vides superflues.

49
Reinier Torenbeek

Ouvrez votre fichier make dans vim plutôt que dans des éditeurs comme gedit. Chaque ligne d'une recette doit commencer par un caractère de tabulation.

26
Aniket Thakur

Cette réponse est pour les autres débutants Make tels que moi qui trouvent cette question sur Google et sont bloqués car ils modifient un grand Makefile préexistant, sans lignes commençant par un caractère espace. Mon problème est survenu parce que n makefile dans un sous-répertoire avec des espaces au lieu d'onglets était appelé par un makefile parent, où je pensais à tort que le problème existait.

Une fois que j'ai corrigé le makefile dans le sous-répertoire, tout fonctionnait comme un charme.

6
entpnerd