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 :
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
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'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ù.
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
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 !
Partager