Bonjour,
Je suis actuellement en train d'essayer de coder un petit programme mais je n'arrive pas à éxecuter mes fichiers. Je viens donc poster un message ici :)
Merci d'avance pour votre réponse.
Bien à vous, Alexandre.
Bonjour,
Je suis actuellement en train d'essayer de coder un petit programme mais je n'arrive pas à éxecuter mes fichiers. Je viens donc poster un message ici :)
Merci d'avance pour votre réponse.
Bien à vous, Alexandre.
# pas main.o
Posté par ComputingFroggy (site web personnel) . Évalué à 1.
Le fichier main.o n'est pas un exécutable : il te faut générer un exécutable en "linkant" tous tes fichiers .o !
Comme tu as un fichier
makefile
, exécute le avec la commandemake
qui va faire tout ce qu'il faut. ;-)[^] # Re: pas main.o
Posté par seletpoivre . Évalué à 1.
Bonsoir, merci de votre réponse :)
J'ai pourtant deja tout fait dans le makefile, je vous le joint ci-dessous.
Y a t-il une erreur ? Merci d'avance :)
[^] # Re: pas main.o
Posté par seletpoivre . Évalué à 1.
le make me retoure : makefile:4: * missing separator. Arret.
:(
[^] # Re: pas main.o
Posté par Matthieu Moy (site web personnel) . Évalué à 3.
Ça veut dire qu'il manque une tabulation en début de ligne 4.
Attention, la syntaxe de Make est « particulière » :
Si tu mets des espaces à la place de la tabulation, ça ne marche pas.
[^] # Re: pas main.o
Posté par NeoX . Évalué à 1.
si le main depend des autres fichiers/programmes ton main.o devrait ressembler à cela
ensuite ton appel à make devrait etre
make main.o
[^] # Re: pas main.o
Posté par LaBienPensanceMaTuer . Évalué à 4.
Ton makefile semble avoir quelques erreurs:
Clairement, vu son inconsistence, l'indentation dans ton Makefile n'est pas bonne…
La définition de ta variable
CC
est certes correcte mais ne suit pas vraiment les best practices en la matière: le-Wall -Werror -std=gnu99
doit être setté dans la variableCFLAGS
.Pour la cible
all
tu as$(CC) -o main.o [...]
ce qui va écraser ton fichier objet et le remplacer par le résultat du link… je ne suis pas sûr que c'est ce que tu souhaites vraiment. Ce qui se fait généralement c'est plutôt un-o main
(pas d'extension pour les executables sous Linux…)En l'état, toutes tes target pour les fichiers en .o sont inutiles car déjà connues explicitement par ̀ make
. Pire que ça, en forçant ces règles explicitement, tu supprimes des eventuels
définis par l'environnement (ou que tu aurais potentiellement définis plus haut … plutôt que dans `(CC) ;-p)Outre ces erreurs, il y aurait quelques optimisations possibles grâce aux variables implictes de GNU Make.
Par exemple, tu peux remplacer ton énumération de .o ligne 4 par un bête
$^
(voir https://www.gnu.org/software/make/manual/html_node/Automatic-Variables.html)Bon courage !
# gcc donne a.out
Posté par LinuxAnonymous . Évalué à 1. Dernière modification le 08 février 2019 à 12:38.
Tu essaies d'exécuter un fichier avec l'extension .o ce qui est impossible, vu que tu as plusieurs fichiers tu peux si tu n'arrives pas à faire de Makefile, créé un dossier où tu déplaceras tout les fichier .c à la racine puis tu fais un Gcc *.c ce qui générera un fichier a.out, pour exécuter tu fais ./a.aout
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.