Bonjour,
Voici ma liste de fichiers :
- Makefile
- liba.h
- libb.h
- libc.h
- liba.cc
- libb.cc
- libc.cc
- main.cc
- main1.cc
- main2.cc
Voici le contenu de mon Makefile :
Ça fonctionne plutôt bien :
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 CC=g++ RM=rm -rfv EXEC=main.out main1.out main2.out OBJECTS=liba.o libb.o libc.o all: $(EXEC) main.out: main.cc $(OBJECTS) $(CC) $< $(OBJECTS) -o $@ main1.out: main1.cc $(OBJECTS) $(CC) $< $(OBJECTS) -o $@ main2.out: main2.cc $(OBJECTS) $(CC) $< $(OBJECTS) -o $@ %.o: %.cc %.h $(CC) -c $< clean: $(RM) $(OBJECTS) mrproper: clean $(RM) $(EXEC)
Comme vous pouvez le remarquer, il y a un peu de redondance dans les règles du Makefile. J'ai donc essayé d'ajouter une règle d'inférence supplémentaire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 $ make g++ -c liba.cc g++ -c libb.cc g++ -c libc.cc g++ main.cc liba.o libb.o libc.o -o main.out g++ main1.cc liba.o libb.o libc.o -o main1.out g++ main2.cc liba.o libb.o libc.o -o main2.out
Voici mon nouveau Makefile :
Mais hélas le résultat n'est pas fameux :
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 CC=g++ RM=rm -rfv EXEC=main.out main1.out main2.out OBJECTS=liba.o libb.o libc.o all: $(EXEC) %.out: %.cc $(OBJECTS) $(CC) $< $(OBJECTS) -o $@ %.o: %.cc %.h $(CC) -c $< clean: $(RM) $(OBJECTS) mrproper: clean $(RM) $(EXEC)
Je ne sais pas pour quelle raison, mais il effectue une suppresion de mes fichiers .o à la fin...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 $ make g++ -c liba.cc g++ -c libb.cc g++ -c libc.cc g++ main.cc liba.o libb.o libc.o -o main.out g++ main1.cc liba.o libb.o libc.o -o main1.out g++ main2.cc liba.o libb.o libc.o -o main2.out rm libc.o liba.o libb.o
Du coup, si je fais une modification sur un fichier main, il me recompile tous les .o :
Est-ce que vous pouvez m'expliquer pourquoi il supprime les fichiers .o?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 $ make make: Rien à faire pour « all ». $ touch main.cc $ make g++ -c liba.cc g++ -c libb.cc g++ -c libc.cc g++ main.cc liba.o libb.o libc.o -o main.out g++ main1.cc liba.o libb.o libc.o -o main1.out g++ main2.cc liba.o libb.o libc.o -o main2.out rm libc.o liba.o libb.o
Avez-vous une solution à ce problème?
Merci.
Partager