#1 Le 16/10/2007, à 16:51
- Luckynow
Makefile : je deviens fou avec ces includes. [Résolu]
Voilà le problème, j'ai un makefile que voici :
ROOT = ../..
include $(ROOT)/Makefile.common
BINS = intset intset-rbtree driver
.PHONY: all clean
all: $(BINS)
%.o: %.c
$(CC) $(CFLAGS) -c -o $@ $<
$(BINS): %: %.o
$(CC) -o $@ $< $(LDFLAGS)
clean:
rm -f $(BINS) *.o
driver: driver.o vector.o
$(CC) -o $@ $< $(LDFLAGS)
Mon but c'est la cible driver, qui nécessite driver.o et vector.o, (driver.c et vector.c).
voici driver.c (tout bête je vous l'accorde).
#include <stdlib.h>
#include "vector.h"
int main(){
int i = 0;
//vector_t* v= vector_new();
i = test();
return 0;
}
Puis vector.c :
#include "vector.h"
#include <stdlib.h>
#include <stdio.h>
int test(){
printf("%s","zzzzzz\n");
return 2;
}
si je fais make, il me dit , driver.c:(.text+0x12): undefined reference to `test'
si je remplace par
#inlcude "vector.c "
dans driver.c
ça passe, mais je veux utiliser seulement .h.
Dernière modification par Luckynow (Le 16/10/2007, à 18:02)
Hors ligne
#2 Le 16/10/2007, à 17:08
- Link31
Re : Makefile : je deviens fou avec ces includes. [Résolu]
C'est parce qu'il manque vector.o dans la commande finale qui lie tous les fichiers objets.
Essaie avec ce Makefile :
CC=gcc
CFLAGS=-W -Wall
LDFLAGS=
DRIVER=driver
all: $(DRIVER)
driver: driver.o vector.o
$(CC) -o $@ $^ $(LDFLAGS)
%.o: %.c
$(CC) -o $@ -c $< $(CFLAGS)
clean:
rm -rf *.o
Hors ligne
#3 Le 16/10/2007, à 17:17
- Luckynow
Re : Makefile : je deviens fou avec ces includes. [Résolu]
Le blème c'est qu'il y a encore plein d'autre fichier qu'il faut aussi mettre dans la cible.
Ces fichiers ne concernent mon travail, mais il doivent être compiler avec le même makefile que mes fichiers.
EDIT :
Tu pourrais m'expliquer la nuance entre $^ et $< ?
Parce que dan ma cible driver: j'ai changer le $< par $^ et ça marche.
Merci, j'ai vu ça grâce à ton exemple
Dernière modification par Luckynow (Le 16/10/2007, à 17:26)
Hors ligne
#4 Le 16/10/2007, à 17:38
- Link31
Re : Makefile : je deviens fou avec ces includes. [Résolu]
$< représente seulement la première dépendance tandis que $^ représente toutes les dépendances (avec $< tu ne spécifiais que driver.o, $^ représente tous les fichiers objets et le lieur peut retrouver la fonction test()).
Va voir ici, c'est bien expliqué : http://gl.developpez.com/tutoriel/outil/makefile/
Hors ligne
#5 Le 16/10/2007, à 17:59
- Luckynow
Re : Makefile : je deviens fou avec ces includes. [Résolu]
merci, j'aurais du poser la question plus tôt, j'ai quand même perdu une demi journée.
vive notre beau métier.....
Dernière modification par Luckynow (Le 16/10/2007, à 17:59)
Hors ligne