Compilation et makefile

johan -  
mamiemando Messages postés 34243 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour , j'ai crée 2 fichiers en C , les voici :

#include <stdio.h>
int my_alphabet1()
int main(void)

{

my_alphabet1()

return 0;

}



et :

int my_alphabet1()

{

char c;

for ( c = 'a'; c <= 'z'; ++c)

putchar(c);

} 


et voici le makfile censé compiler le tout :

#on utilise gcc comme compilateur par defaut
CC=gcc


#flags d'erreur
ERROR_CFLAGS = -Wall -W -pedantic


#on indique quelques drapeux passes au compilateur
CFLAGS=$(ERROR_FLAGS)


# Les flags  de link
LDFLAGS=$(ERROR_FLAGS)




#on construit le programme
all: test


#compilation des fichiers
test: main.c my_alphabet1.c
   $(CC) $(CFLAGS) -c main.c my_alphabet1.c
   $(CC) $(LDFLAGS) -o test main.o my_alphabet1.o


#nettoyage...
clean:
   rm -f *.o *~ core test


et voici mon message d'erreur quand je tape make dans le shell :

(CC) (CFLAGS) -c main.c my_alphabet1.c
/bin/sh: -c: line 0: syntax error near unexpected token (

/bin/sh: -c: line 0: (CC) (CFLAGS) -c main.c my_alphabet1.c
make: *** [test] Erreur 2

quelqu'un aurait une idée pour que je compile mes fichiers correctement avec make?
merci

17 réponses

mamiemando Messages postés 34243 Date d'inscription   Statut Modérateur Dernière intervention   7 898
 
Il faut mettre des tabulations et non des espaces devant les lignes de compilation.

Bonne chance
0
johan
 
peux tu préciser exactement où s'il te plait , car sinon je vais pas trouver , après quel mot je dois mettre une tabulation ?
0
mamiemando Messages postés 34243 Date d'inscription   Statut Modérateur Dernière intervention   7 898
 
all:
<tab>gcc blabla.c

En remplaçant <tab> par une tabulation
0
johan
 
mais j'ai aucune ligne all:
<tab>gcc blabla.c

j'ai déjà mis des tabulations avant

$(CC) $(CFLAGS) -c main.c my_alphabet1.c

et avant

$(CC) $(LDFLAGS) -o test main.o my_alphabet1.o

alors ya un truc qui cloche :)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
johan
 
personne n'a de solutions ? :(
0
kilian Messages postés 8854 Statut Modérateur 1 526
 
Si tu remplace $(CC) par gcc et ainsi de suite pour les autres variables, ça marche?
0
johan
 
j'ai rien compris , c'est mon 1er makefile , alors que dois je remplacer exactement et précisément ...
0
johan
 
je recopie le makefile mot pour mot :

#on utilise gcc comme compilateur par defaut
CC=gcc


#flags d'erreur
ERROR_CFLAGS = -Wall -W -pedantic


#on indique quelques drapeux passes au compilateur
CFLAGS=$(ERROR_FLAGS)


# Les flags  de link
LDFLAGS=$(ERROR_FLAGS)




#on construit le programme
all: test


#compilation des fichiers
test: main.c my_alphabet1.c
   $(CC) $(CFLAGS) -c main.c my_alphabet1.c
   $(CC) $(LDFLAGS) -o test main.o my_alphabet1.o


#nettoyage...
clean:
   rm -f *.o *~ core test


et voici mon nouveau message d'erreur :

gcc (ERROR _FLAGS) -c main.c my_alphabet1.c
/bin/sh: -c: line 0: syntax error near unexpected token ERROR FLAGS

/bin/sh: -c: line 0: gcc ( ERROR_FLAGS) -c main.c my_alphabet1.c
make: *** [test] Erreur 2
0
kilian Messages postés 8854 Statut Modérateur 1 526
 
Quand tu fais ça:
CC=gcc

Ca signifie que la variable CC prend la valeur de gcc.
Et la valeur de CC c'est $(CC)

Donc, on va essayer de voir remplaçant les variables par leur valeur.
Soit:
test: main.c my_alphabet1.c
   $(CC) $(CFLAGS) -c main.c my_alphabet1.c
   $(CC) $(LDFLAGS) -o test main.o my_alphabet1.o

a remplacer par:
test: main.c my_alphabet1.c
   gcc -W -Wall -pedantic -c main.c my_alphabet1.c
   gcc -W -Wall -pedantic -o test main.o my_alphabet1.o
0
johan
 
alors après le remplacement , voici le message d'erreur ( putinc 'est super compliqué en fait de faire un make file ) :

gcc -W -Wall -pedantic -c main.c my_alphabet1.c
main.c: n function mt_alphabet1:
main.c:7: warning : main is usually a function
main.c:7: error : syntax error before { token
my_alphabet1.c: in function my_alphabet1
my_alphabet1.c: warning: implicit declaration of function putchar
my_alphabet1.c: control reaches end of non-void function
make: ** [test] erreur 1
0
kilian Messages postés 8854 Statut Modérateur 1 526
 
Non, là ton Makefile, fonctionne. C'est la compilation ne passe pas.
N'empêche que c'est bizzare qu'il ne prenne pas les variables du makefile.

Montre voir ton code source pour les deux fichiers.
0
johan
 
voici le main :

#include <stdio.h>
int my_alphabet1()
int main(void)

{

my_alphabet1()

return 0;

}



et voic le my_alphabet1 :

int my_alphabet1()

{

char c;

for ( c = 'a'; c <= 'z'; ++c)

putchar(c);

} 
0
kilian Messages postés 8854 Statut Modérateur 1 526
 
Oki, alors petites corrections:

Main.c:
#include <stdio.h>
int my_alphabet1() //Manque un point virgule
int main(void)

{

my_alphabet1() //Manque un point virgule

return 0;

}

Myalphabet.c:
//Manque #include <stdio.h>
//Sinon, c'est comme si putchar venait de nulle part
int my_alphabet1()
{

char c;

for ( c = 'a'; c <= 'z'; ++c)

putchar(c);

} 
0
johan
 
alors je n'ai plus qu'une erreur :

my_alphabet1.c: 1: error: syntax error before '<' token

j'en profite pour dire au passage que j'ai un main.o et un my_alphabet1.o dans mon répertoire , je pensais qu'ils seraient supprimés automatiquement avec le makefile...
0
crabs Messages postés 909 Statut Membre 507
 
Salut, -> johan
Tu peux préciser ton environnement : OS, version de make ainsi
que les variables d'environnement dont tu disposes.
Essaies ce petit makefile en créant au préalable 2 fichiers vide f1 et f2 dans le
même dossier :
TOUCH=touch
all: test

test: r1 r2
        $(TOUCH) $@

r1: f1
        $(TOUCH) $@

r2: f2
        $(TOUCH) $@

Mets des <tab> à la place des espaces. A la limite si tu peux mettre sur le net
un tar ou un zip qui contient tes fichiers et filez l'url ça serait pas mal.
0
johan
 
j'utilise une mandriva 10.2 , avec gcc3.4.3 , GNU make 3.80 , quand aux variables d'environnement je ne sais pas comment faire car je débute sous linux...
0
crabs Messages postés 909 Statut Membre 507
 
Tu ouvre un shell et tu tapes la commende 'env'.
As-tu essayé le makefile avec touch ?
0
johan
 
oups , j'ai une tonne de variables d'environnement , je peux pas faire de copié collé car le pc qui a linux n'est pas connecté au net , sinon pour mon soucis de compilation il me reste plus qu'une seule erreur , saurais tu à quoi elle est dûe?
0
mamiemando Messages postés 34243 Date d'inscription   Statut Modérateur Dernière intervention   7 898
 
Donne nous le code actuel et l'erreur de compilation et on pourra te dire.
0