Make : sources dans un sous-rep, objets dans un autre.
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 :
Code:
1 2 3 4 5 6 7 8
|
include
src
gps_frames.c
main.c
post_send.c
sender.c
obj |
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.
trève de bavardages, je poste le makefile, ce sera plus clair :
Code:
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 |
Pour l'instant la règle $(OBJ) est bien sûr débile :mouarf:, 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 ! :ccool:
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.