Bonjour a tous,

Je suis confronte a un probleme, qui je pense, doit pouvoir se resoudre aisement. Malheureusement je suis pas tres fort en Makefile

Voila mon probleme : je dispose de plusieurs fichiers sources .c, dans differents dossiers.

Mettons :

- ./ (racine ou se trouve mon Makefile)
- ./plop/plop1.c
- ./plop/plop2.c
- ./toto/titi.c

Mon makefile est donc cense choper les fichiers que je lui indique en source dans ces differents sous dossiers (je compile avec gcc), me generer des fichiers .o (apres compilation des fichiers). Malheureusement, lors du make, il me place les fichiers .o a la racine du dossier (./), et apres il ne les trouve pas pour generer mon executable (il les cherches dans les sous dossiers).

Pour faire plus clair, voila mon Makefile :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
NAME    =       executable
SRC     =       plop/plop1.c \
                    plop/plop2.c \
                    toto/titi.c
OBJ     =       $(SRC:.c=.o)
 
$(NAME) :       $(OBJ)
                gcc -o $(NAME) $(OBJ)
all     :       $(NAME)
Je me retrouve donc avec dans le dossier ./ ces fichiers .o :
- ./plop1.o
- ./plop2.o
- ./titi.o

Jusque la normal sauf que la compilation va planter, ne trouvant pas les .o dans les sous-dossiers :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
gcc: funcs/base1.o: No such file or directory
gcc: plop/plop1.o: No such file or directory
gcc: plop/plop2.o: No such file or directory
gcc: toto/titi.o: No such file or directory
gcc: no input files
*** Error code 1
 
Stop.
make: stopped in ./...
Bref, avant j'utilisais une commande "mv" dans le Makefile, lui disant de deplacer fichier par fichier .o dans leur repertoire respectifs. Mais cest crade et surtout tres lourd a utiliser/mettre a jour.

Il y aurait-il une solution plus simple ?
J'ai cherche du cote de man make et make mkdep, mais sans beaucoup de succes. Si quelqu'un aurait des astuces