Bonjour,

Je dois travailler en C++ en utilisant un makefile fait par quelqu'un d'autre, mais je n'ai pas du tout d'expérience avec les makefile, et je bloque sur quelque chose. Voilà le makefile que j'ai :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
 
SRC=$(shell ls *.cc) 
SRC_GENVIDEO=$(shell ls genvideo/*.cc)
 
LIB=-lxml2 -lpng -lxine -lgsl -lgslcblas -lm -lX11 -lpthread -lboost_filesystem-gcc34 
LIBS=-L/usr/X11R6/lib -L/home/fgillier/local/lib 
INCLUDES=-I/usr/include/libxml2 -I/home/fgillier/local/include 
 
DEBUG=valgrind
CXX=g++
CC=g++
 
ifeq ($(OUTPUTS),yes)
 OPTS=-DOUTPUTS
endif
 
ifeq ($(DEBUG),yes)
 CXXFLAGS = -Wall -g $(OPTS) $(INCLUDES) -DDEBUG
else 
  ifeq ($(DEBUG),valgrind)
    CXXFLAGS = -Wall -g -o3 $(OPTS) $(INCLUDES) -DHAVE_PTHREAD
  else
   CXXFLAGS = -Wall $(OPTS) $(INCLUDES) -ffast-math -fcaller-saves -finline-functions -funroll-all-loops -O3 -DHAVE_PTHREAD
  endif
endif
 
 
all: tracker
lib: libpom.a
 
 
tracker: $(SRC:.cc=.o)
	$(CXX) $(CXXFLAGS) $(LIBS) -o $@ $^ $(LDFLAGS) $(LIB)
 
libpom.a: $(SRC:.cc=.o)
	ar rc libpom.a $^
	ranlib libpom.a
 
 
Makefile.depend: *.h *.cc Makefile
	$(CC) -M $(INCLUDES) *.cc > Makefile.depend
 
clean:
	rm -f *.o tracker *~
 
test1: $(SRC:.cc=.o) $(SRC_GENVIDEO:.cc=.o)
	$(CXX) $(CXXFLAGS) $(LIBS) -o $@ $^ $(LDFLAGS) $(LIB)
 
-include Makefile.depend
J'essaie de le modifier pour faire intervenir des classes d'un autre répertoire que le répertoire courant, c'est pourquoi j'ai défini SRC_GENVIDEO et l'ai ajouté à la règle pour créer l'exécutable test1. Les fichiers .o se créent correctement (je crois), mais j'obtient une erreur au moment de linker le tout :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
/home/fgillier/src/surv/tracker/cube.cc:219: undefined reference to `GenVideo::GenVideo(char*, int)'
collect2: ld returned 1 exit status
make: *** [test1] Error 1
J'imagine qu'il faut que j'inclue le répertoire dans lequel sont ces nouvelles classes quelque part, mais ce makefile est un peu trop "condensé" et je ne trouve pas où.

Merci d'avance de votre aide, et si vous avez un bon tutorial à me conseiller pour les makefile (pas pour les bases, mais pour faire des makefile efficaces du genre de celui-ci), c'est avec plaisir !