2010-06-29 13 views
1

J'ai du mal à écrire des fichiers makefiles. J'ai de l'expérience dans l'utilisation des variables extern, quand je construis le projet sans utiliser de fichier makefile, je n'ai absolument aucune erreur et je peux lancer le programme. Mais à partir du moment où j'ai écrit le makefile pour construire le projet, j'obtiens des erreurs undefined reference to.Temps de liaison "référence non définie à" erreurs

J'ai plus de 3 fichiers avec moi mais, par souci de simplicité, je vais utiliser 3 fichiers ici pour expliquer la configuration.

/************Project********/ 
/* main.c */ 
int x; 
main() 
{ 
... 

} 

/* File1.c*/ 
extern int x; 
fn1() 
{ 
... 
} 

/* File2.c*/ 
extern int x; 
fn2() 
{ 
... 
} 
/*******************************/ 

À l'aide du makefile je reçois undefined reference to erreurs pendant le temps reliant pointant vers le fichier1.c et fichier2.c? Est-ce que je fais une erreur que l'éclipse corrige d'elle-même (quand makefile n'est pas utilisé) et qui disparaît quand j'utilise makefile?

Mon makefile finale ressemble à ceci -

OBJ1 = algorithme/algorithme main.o/algorithme File1.o/File2.o

all: final 

final: main.o algorithm/File1.o algorithm/File2.o 
@echo "Linking - making Final" 
$(CC) -o [email protected] $(OBJ1) 
+0

Dans votre Makefile, la règle "final" dépend de main.o, mais vous liez ensuite l'algorithme/main.o. Est-ce intentionnel? – bjg

Répondre

2

Il y a une différence dans votre Makefile. Votre cible final dépend de main.o, alors que vous attribuez $(OBJ1) à l'éditeur de liens, qui inclut algorithm/main.o.

+0

Ya raison, j'ai raté totalement. maintenant je suis capable de construire. Ma tête était devenue floue en essayant de localiser où le problème pourrait être. Merci beaucoup. – HaggarTheHorrible