Bonjour,
Je viens de rendre un peu plus propre l'arborescence d'un projet en C sur lequel je travaille et j'ai des difficultés pour réaliser mon makefile.
L'arborescence est la suivante :
Où include contient les headers, src les .c et obj doit contenir les .o qui seront utilisés pour créer l'exécutable main, situé à la racine.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 include src gps_frames.c main.c post_send.c sender.c obj
trève de bavardages, je poste le makefile, ce sera plus clair :
Pour l'instant la règle $(OBJ) est bien sûr débile
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=gcc CFLAGS=-W -Wall -std=c99 -Iinclude LDFLAGS= EXEC=main INC=include SRC_DIR=src OBJ_DIR=obj SRC=$(wildcard $(SRC_DIR)/*.c) OBJ=$(SRC:$(SRC_DIR)/%.c=$(OBJ_DIR)/%.o) all:$(EXEC) $(EXEC):$(OBJ) $(CC) -o $@ $< $(LDFLAGS) $(CFLAGS) $(OBJ): $(CC) -c $^ -o $@ clean: rm -f $(OBJ) mrproper:clean rm -f $(EXEC) .PHONY:clean all mrproper, mais c'est justement celle là que je n'arrive pas à écrire.
Apparemment, $(OBJ): crée une règle par fichier objet, je voudrais qu'à chaque règle, la dépendance soit sur le fichier .c correspondant et ça, j'y arrive pas. J'ai essayé avec la variable $@ mais dès que j'essaye de la modifier, (par exemple avec patsubst) j'obtiens un résultat vide.
Par exemple pour la règle obj/gps_frames.o, je voudrais créer une dépendance en remplaçant obj ($(OBJ)) par src ($(SRC)) et .o par .c ce qui doit donner obj/gps_frames.o:src/gps_frames.c.
Ça doit bien être possible, mais p****n je me casse les dents dessus !!!
Merci d'avance !
PS: Bien sûr je pourrai créer chaque règle à la main, mais le projet va pas mal évoluer, il risque d'y avoir pas mal de fichiers sources et je voudrai que tout soit facilement maintenable.
[Edit] J'ai eu beaucoup de mal à savoir où poster, et je ne suis pas convaincu que cette section soit la meilleure, n'hésitez pas à déplacer si je me suis planté ! Merci.
Partager