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