Bonjour à tous,

J'aimerais créer un Makefile compilant des fichiers dans différents dossiers et créer 2 exécutables :
un pour le programme principal
un pour les tests unitaires menés avec CppUnit.

J'ai les dossiers suivants :
src : pour les sources
src_test : pour les sources de cppunit
bin : pour les exécutables
lib : endroits où seront crées les .o

J'ai réalisé un Makefile le plus compréhensible possible :

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
50
51
52
53
54
55
56
 
#Makefile
 
CPP=g++
CFLAGS = -I$(HEADDIR) -g -Wall -pedantic -Os
LDLIBS = -lcppunit
GLLIBS = GLLIBS = -ltiff -framework OPENGL -framework GLUT -framework GLUI -lobjc -lstdc++ -lm
 
EXEC = Projet
EXECTEST = TestsUnitaires
 
 
BINDIR = bin
SRCDIR = src
LIBDIR = lib
HEADDIR = src
SRCTESTDIR = src_test
 
 
SOURCES = $(wildcard $(SRCDIR)/*.cpp)
SOURCESTEST = $(wildcard $(SRCTESTDIR)/*.cpp)
OBJS = $(SOURCES:$(SRCDIR)/%.cpp=$(LIBDIR)/%.o)
OBJSTEST = $(SOURCESTEST:$(SRCDIRTEST)/%.cpp=$(LIBDIR)/%.o)
 
 
all: $(EXEC) $(EXECTEST)
 
 
 
# Création des exécutables
 
 
 
Projet: $(OBJS)
	$(CPP) -o $(BINDIR)/$@ $^ $(CFLAGS) $(GLLIBS) $(LDLIBS)
 
TestsUnitaires: $(OBJSTEST)
	$(CPP) -o $(BINDIR)/$@ $^ $(CFLAGS) $(GLLIBS) $(LDLIBS)
 
 
 
# Création des objets 
 
 
 
$(LIBDIR)/%.o: $(SRCDIR)/%.cpp $(SRCDIR)/%.h 
	$(CPP) -o $@ -c $< $(CFLAGS) $(LDLIBS)
 
$(LIBDIR)/%.o: $(SRCTESTDIR)/%.cpp $(HEADDIR)/%.h
	$(CPP) -o $@ -c $< $(CFLAGS) $(LDLIBS)
 
 
 
clean:
	rm $(LIBDIR)/*.o
	rm $(BINDIR)/*
L'erreur issue du make est la suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
make: *** No rule to make target `lib/Acteur.o', needed by `Projet'.  Stop.
Acteur.cpp de mon projet une classe située dans src. (la première dans l'ordre alphabétique et la première à être compilée). Actuellement, lib est vide, tous les hpp sont situés dans src. Le Makefile est situé dans un dossier où se situent les dossiers src, lib, etc ...

J'espère que vous pourrez m'éclairer.
En vous remerciant par avance,

Xavier Duval