Compilation et makefile
Bonjour , j'ai crée 2 fichiers en C , les voici :
et voici le makfile censé compiler le tout :
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
#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
A voir également:
- Compilation et makefile
- Breach compilation c'est quoi - Guide
- Erreur de compilation dans le module caché excel - Forum Logiciels
- Makefile separateur manquant - Forum calculatrices
- Compilation error: expected unqualified-id before '{' token ✓ - Forum C++
- Compiler un programme java avec un makefile - Forum Java
17 réponses
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 ?
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 :)
<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 :)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
j'ai rien compris , c'est mon 1er makefile , alors que dois je remplacer exactement et précisément ...
je recopie le makefile mot pour mot :
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
#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
Quand tu fais ça:
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:
a remplacer par:
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
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
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
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.
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.
voici le main :
et voic le my_alphabet1 :
#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);
}
Oki, alors petites corrections:
Main.c:
Myalphabet.c:
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);
}
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...
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...
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 :
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.
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.
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...