IPB

Bienvenue invité ( Connexion | Inscription )

> Problème avec la compilation avec Eclipse (Plugins C/C++)
Options
neo927
posté 29 Mar 2007, 07:35
Message #1


Nouveau Membre


Groupe : Membres
Messages : 9
Inscrit : 29 Mar 2007
Membre no 83 686



Bonjour à tous,

J'ai un problème (eh oui, sinon je vous écrirais pas..)
Lorsque je créer un nouveau projet avec eclipse (+ SDK), il m'ajoute les INCLUDES, un dossier pour le Débugage (il me semble) et ensuite une erreur se produit:
****

make -k all
Génération du fichier : ../main.c
Appel en cours : Compilateur GCC C
gcc -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"main.d" -MT"main.d" -o"main.o" "../main.c"
Génération terminée : ../main.c

Génération de cible : essai2
Appel en cours : Editeur de liens C MacOS X
gcc -o "essai2" ./main.o
ld: Undefined symbols:
_main
make: *** [essai2] Error 1
make: Target `all' not remade because of errors.
Génération terminée pour le projet essai2


ensuite lorsque j'essaie de compiler, il me dit que l'application d'existe pas...
Auriez-vous une solution à mon problème?

Merci d'avoir pris la peine de lire mon post.
Go to the top of the page
 
+Quote Post
 
Start new topic
Réponse(s)
Jaypee
posté 31 Mar 2007, 07:34
Message #2


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 2 486
Inscrit : 29 Aug 2002
Membre no 3 340



Tes difficultés ne sont pas liées au Mac, mais seulement au changement de plateforme, tu serais passé à Linux tu aurais les même questions.
Le Makefile, c' est une technologie vieille de 40 ans au moins.
Le principe de base est qu'on y décrit le projet en terme de dépendances :
- main.o dépend de main.c : main.o est la cible, main.c la dépendance.
- si la date de la dépendance est plus récente que celle de la cible, le make va tenter de traiter la cible
- le make ne traite que la première cible du makefile, c' est le jeu des dépendances qui va faire traiter les autres.

Un makefile bien fait ne va refaire que le strict nécessaire. Voici un squelette minimal:
CODE
CC=gcc
CFLAGS=-c
LDFLAGS=

.c.o:
    $(CC) $(CFLAGS) $<

all: hello

hello: hello.o
    $(CC) $(LDFLAGS) -o $@
        
hello.o: hello.c


.c.o: c' est une règle pour expliquer une fois pour toute, ce qui faut faire pour traiter un .o dépendant d'un .c
En majuscules, les symboles, pour éviter de recopier partout des détails de compil.
$< et $@ sont des macros :
$< représente la dépendance
$@ représente la cible suivie des dépendances (à vérifier)
CFLAGS ce sont les options de compilation
LDFLAGS les options de link
Imaginons que le projet se complique et que tu as un second module goodbye.c
CODE
CC=gcc
CFLAGS=-c
LDFLAGS=

.c.o:
    $(CC) $(CFLAGS) $<

all: hello

hello: hello.o goodbye.o
    $(CC) $(LDFLAGS) -o $@
        
hello.o: hello.c
goodbye.o: goodbye.c


Tu vois que les ajouts sont simples, et le make va faire le travail supplémentaire.

J-P

Ce message a été modifié par Jaypee - 31 Mar 2007, 07:39.
Go to the top of the page
 
+Quote Post

Les messages de ce sujet


Reply to this topicStart new topic
3 utilisateur(s) sur ce sujet (3 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



Nous sommes le : 3rd April 2026 - 09:37