Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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..... lol

Dernière modification par Luckynow (Le 16/10/2007, à 17:59)

Hors ligne