Makefile

Mmh35 -  
[Dal] Messages postés 6373 Statut Contributeur -
Bonjour,
Je débute en C, et j'ai un petit problème avec mon make, il me met

Pas de règle pour fabriquer la cible "test2.c", necessaire pour "test2.o". Arret.

Voici mon fichier makefiles :
all : test2.o
gcc obj/test2.o -o bin/test2

test2.o : test2.c
gcc -c src/test2.c -o obj/test2.o

Comme vous l'aurez surement compris, j'ai 3 répertoires sous la racine du répertoire du makefiles et les différents fichiers doivent être stockés dedans...
J'ai bien mis la tabulation.
Seul le fichier ./src/test2.c existe.

<config>Debian</config>

2 réponses

[Dal] Messages postés 6373 Statut Contributeur 1 106
 
Salut Mmh35,

Si j'ai bien compris ce que tu veux faire, essaye comme cela :

CFLAGS=-Wall -g  

all: test2  

test2.o:  
    gcc -o obj/test2.o -c src/test2.c  

test2: test2.o  
    gcc -o bin/test2 obj/test2.o

Cela met le .o dans obj/, l'exécutable dans bin/, le fichier .c étant dans src/

Dal
2
Mmh35
 
Merci Dal

Et si je veux mettre plusieurs compilations dans le même makefile, je met à la suite

all : test3
........


?
0
[Dal] Messages postés 6373 Statut Contributeur 1 106
 
Je ne comprend pas bien ta question.

Si tu as plusieurs exécutables à créer, tu peux les mettre dans "all:", séparés par des espaces.

all: test2 test3

Il faudra que le Makefile gère les dépendances de la création de chacun des exécutables.

Pour éviter d'avoir à taper tous les noms de fichiers, tu peux utiliser des "pattern rules", ou utiliser des fonctions de substitution, pour dire, par exemple, au compilateur comment produire des fichiers .o à partir de tous les fichiers .c, et comment utiliser tous les fichiers .o pour produire un exécutable.

Vois la documentation de GNU Make et ses exemples:

http://www.gnu.org/savannah-checkouts/gnu/make/manual/html_node/Pattern-Examples.html#Pattern-Examples
http://www.gnu.org/savannah-checkouts/gnu/make/manual/html_node/Text-Functions.html#Text-Functions


Dal
0