Bonjour,
je suis sur un projet d'application (jusque là logique).
j'ai pris l'habitude de ranger mes fichiers de façon logique, c'est à dire de cette manière :
-Makefile
-src/+
|-*.c
-inc/+
|-*.h
-obj/+
|-*.o
-lib/+
|-*.a
voici mon Makefile :
Petite précision, je suis sous FreeBSD, et l'un des mécanisme des Makefiles sous FreeBSD est de se placer dans le répertoire obj/ s'il existe.
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115 ################################################################################ ################################################################################ # Zone a personnaliser # ################################################################################ ################################################################################ ## Debug ? ## DEBUG = yes ## Sources files ## SRC = main.c ################################################################################ ################################################################################ # /!\ Zone a ne pas toucher /!\ # ################################################################################ ################################################################################ ## Directories ## DSRC = ../src DINC = ../inc DLIB = ../lib ## Files ## OBJ = ${SRC:.c=.o} INC = ${SRC:.c=.h} ## Compil paths ## IPATH = -I${DINC} -I. LPATH = -L${DLIB} ## Librairies utilisees ## LIBS = -lma_lib ## Flags ## WFLAGS = -W -Wall -Wstrict-prototypes -ansi -pedantic .if ${DEBUG} == yes OPTI = -g .else OPTI = -O3 .endif CFLAGS = ${WFLAGS} ${OPTI} ${IPATH} LDFLAGS = ${LPATH} ${LIBS} ## Binary used in Makefile ## CC = gcc RM = rm -f COMP = gzip -f UNCOMP = gunzip -f ## Gestions des couleurs ## RED = printf '\033[0;31;40m' GREEN = printf '\033[0;32;40m' YEL = printf '\033[0;33;40m' BLUE = printf '\033[0;34;40m' CYAN = printf '\033[0;35;40m' TURQ = printf '\033[0;36;40m' WHITE = printf '\033[0;37;40m' ## Gestion des erreurs ## ERR = ../.ccerr ## Targets ## TARGET = asm all : ${TARGET} @${GREEN}; echo; echo "Errors & Warnings: " @${RED}; @cat ${ERR};echo @echo -n > ${ERR} ${TARGET} : ${OBJ} @${YEL} @echo "--------------------------------------------------------------------------------" @echo -n "Link edition : " @(((${CC} -o ../$@ ${OBJ} ${LDFLAGS}) 2>> ${ERR} && ${GREEN} && echo -n "DONE ") || (${RED}; echo -n "FAILED")) @${YEL} && echo -n " ==> [" && ${WHITE} && echo -n "$@" && ${YEL} && echo "]" ${OBJ} : ${SRC} ${INC} @${YEL} @echo -n "Compilation : " @(((${CC} -c ${DSRC}/$< ${CFLAGS}) 2>> ${ERR}) && ${GREEN} && echo -n "DONE ") || (${RED}; echo -n "FAILED") @${YEL} && echo -n " ==> [" && ${WHITE} && echo -n "$<" && ${YEL} && echo "]" ${SRC} : ${INC} ${INC} : ## Regles de nettoyage ## clean : @${YEL};echo -n "Cleaning .... " @${RM} *~ @${RM} \#* @${RM} *.o @${RM} ../*~ @${RM} ../\#* @${RM} ${DSRC}/*~ @${RM} ${DSRC}/\#* @${RM} ${DINC}/*~ @${RM} ${DINC}\#* @${GREEN}; echo "DONE" fclean : clean @${YEL};echo -n "Cleaning of ${TARGET} " @${RM} ${TARGET} @${GREEN}; echo "DONE" re : fclean all ## Regles de compressiond des fichiers sources ## comp : clean ${COMP} ${SRC} ${INC} uncomp : ${UNCOMP} ${SRC} ${INC}
Mon problème étant que lorsque je fais la règle .c.o ou ${OBJ}:${SRC}, il ne sait pas regarder dans le bon répetoire (logique parce que je mets les noms des fichiers sans le répertoire. Cependant, je ne peux pas le mettre au nom des fichiers parce que sinon a cause de la règle
je me retrouverais avec les .o dans le dossier src/ ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part OBJ=${SRC:.c=.o}
Y a-t-il un moyen de faire en sorte de changer le .c en .o mais aussi le src/ en obj/, du styleJ'ai déjà vu cette forme, mais je n'arrive pas à la retrouver...
Code : Sélectionner tout - Visualiser dans une fenêtre à part OBJ=${SRC:src/*.c=obj/*.o}
Merci d'avance de m'aider
Partager