CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C] makefile

guyver2
guyver2
Niveau 10
09 mai 2005 à 18:12:45

je doit rendre un projet de C en cours d´info.
tous les fichiers sources sont finis, le prog fonctionne impecablement.
mais on me demande en plus un Makefile.
ne sachant pas ce que c´est, je cherche dans mon cours mais je n´ai pas très bien compris a quoi ça servait et encore moins comment ça fonctionne.
d´apres ce que je pense avoir compris ça sert a compiler les fichiers separement ce qui permet de ne recompiler que les fichiers modifiés depuis la derniere compilation.
alors voici la liste des fichiers que j´ai créé:
-calculatrice.c / /prog principal
-eval.h
-eval.c
-pile.h
-pile.c
-operation.h
-operation.c

je vous met les différentes relation entres les fichiers
calculatrice.c inclus eval.h
eval.c inclus pile.h et operation.h
operation.c inclus pile.h

pour compiler mon prog je ne compile que calculatrice.c

je ne sait pas si cela vous suffit comme présentation de mon pb
si c´est le cas je voudrait savoir a quoi doit ressembler mon fichier makefile.
merci

Lapintade
Lapintade
Niveau 30
09 mai 2005 à 18:18:45

Un makefile ca sert d´un maniere generale a construire quelquechose a partir de regles.

Tu donne ton objet a construire, les trucs dont il depends et les regles pour construire des trucs. Je dis " trucs" car ca peut etre n´importe quoi.

Le makefile doit etre ecrit dans une syntaxe particuliere ( regarde dans tes cours) et c´est la meme pour toutes les machines.

Le makefile verifie en effet les dates des fichiers et lorsque la source d´un truc n´a pas changé, il ne le reconstruit pas.

Lapintade
Lapintade
Niveau 30
09 mai 2005 à 18:20:00

Voici un makefile que j´ai utilise pour GBA :

CFLAGS = -c -O3
MODEL = -mthumb -mthumb-interwork
all : TankZone.bin

TankZone.bin: TankZone.elf
objcopy -O binary TankZone.elf TankZone.bin

TankZone.elf : main.o
gcc $(MODEL) -o TankZone.elf main.o

main.o : main.c
gcc $(CFLAGS) $(MODEL) main.c

Lapintade
Lapintade
Niveau 30
09 mai 2005 à 18:20:41

( il faut mettre des espace, mais ce forum a la noix les as tous bouffés).
Je vais mettre des _ a la place

CFLAGS = -c -O3
MODEL = -mthumb -mthumb-interwork
all : TankZone.bin

TankZone.bin: TankZone.elf
_objcopy -O binary TankZone.elf TankZone.bin

TankZone.elf : main.o
_gcc $(MODEL) -o TankZone.elf main.o

main.o : main.c
_gcc $(CFLAGS) $(MODEL) main.c

Lapintade
Lapintade
Niveau 30
09 mai 2005 à 18:26:24

Pour les . h, ca intervient pas dans le makefile. Le . h est juste une partie du fichier C, le compilo considere ca comme un seul fichier, car il " include" le texte du . h.

Le makefile mets en relation l´objet compilé ( le fichier . o) et le fichier source ( .c).

guyver2
guyver2
Niveau 10
09 mai 2005 à 19:09:33

ok merci je vais voir avec ce que j´ai ce que sa pourait donner.

guyver2
guyver2
Niveau 10
10 mai 2005 à 01:27:31

alors j´ai réussi a faire un truc qui fonctionne
je te met ce que j´ai ecrit dans mon makefile.

  1. makefile de la calculatrice

calc: calculatrice.c eval.c eval.h pile.c pile.h operation.c operation.h
_gcc -Wall -o calc calculatrice.c

avec une tabulation a la place de _
mais je ne vois pas en quoi ces 2 lignes ( la 1ere commence par " calc" et la seconde par " _gcc" je te met ça car j´imagine que sur le forum ça va apparaitre sur 3 lignes) permetent de faciliter la compilation.

alors soit tout est bien et c´est ça qu´il faut faire soit le truc que j´ai tapé est bidon mais fonctionne quand meme....

guyver2
guyver2
Niveau 10
10 mai 2005 à 01:29:57

autre interogation:
chez moi je compile en tapant:
gcc -Wall -o calc calculatrice.c

et a la fac ( sous linux) il faut rajouter la comande -lm si on veut utiliser sqrt.
pourquoi donc ( j´imagine que ça doit vouloir dir un truc du genre link math.h).

franco01
franco01
Niveau 7
10 mai 2005 à 10:00:13

Si je me rappelle bien, pour compiler le projet en utilisant le makefile, il faut ecrire " make" dans la ligne de commande.

Pour le -lm - sous linux, c´est pour appeller math.lib car même si tu as bien appellé " #include < math.h>" ( prototypages) dans ton source, il faut utiliser la librairie où se trouvent le corps des fonctions.

kufa
kufa
Niveau 9
10 mai 2005 à 10:52:50

La doc de make est tres bien faite. Avec un peu d entrainement, tu arriveras a faire un makefile sans avoir a rentrer les differents fichiers . o, et qui reussira a determiner les dependances lorsque tu le lui demande.

/ kUfa

guyver2
guyver2
Niveau 10
10 mai 2005 à 12:27:48

franco01 Posté le 10 mai 2005 à 10:00:13

>Si je me rappelle bien, pour compiler le projet en utilisant le makefile, il faut ecrire " make" dans la ligne de commande

ça c´est bon j´avais compris; mais ce que je voudrait savoir c´est si les 2 lignes que j´ai tapées permettent au compilo de savoir quels fichiers ont été modifiés depuis la derniere compilation et quels autres sont restés inchangés.
il me semble que pour le moment le seul interet de mon makefile est que pour compiler je gagne 20 caracteres sur la ligne de comande ( "make" au lieu de " gcc -Wall -lm -o calc calculatrice.c")

guyver2
guyver2
Niveau 10
10 mai 2005 à 15:53:42

j´ai commencé a faire des fichiers . o
de la maniere suivante.

  1. makefile de la calculatrice

calc : calculatrice.o eval.o pile.o operation.o
gcc -Wall -o calc calculatrice.o eval.o pile.o operation.o

calclculatrice.o : calculatrice.c
gcc -c calculatrice.c

eval.o : eval.h eval.c
gcc -c eval.c

operation.o : operation.c operation.h
gcc -c operation.c

pile.o : pile.c pile.h
gcc -c pile.c

clean :
rm -f *.o

===========
mais lorsque je tape " make" j´ai des message d´erreur qui me dise que je déclare plusieur fois des fonctions.

je supose que ça vient du fait que
-operation.c inclus pile.h
-eval.c inclus pile.h et operation.h
-calculatrice.c inclus eval.h

si c´est ça comment faire pour que les fichiers ne soit inclus qu´une seul fois
( un truc un peu dans le genre

  1. ifndef PILE_H
  2. define PILE_H

. .. le corp de pile.h

  1. endif

que j´ai utilisé dans chaque fichier . h pour qu´il ne soit inclus qu´une fois lorsque je compile calculatrice.c)

? ?
merci

Lapintade
Lapintade
Niveau 30
10 mai 2005 à 16:00:41

Ton makefile a l´air correct.
Attention de verifier d´ou viennent tes erreurs. Du makefile ou des commandes gcc executées ? ?

guyver2
guyver2
Niveau 10
10 mai 2005 à 23:35:46

les erreurs viennent des commandes gcc.
en fait je me suis trompé:
dans mes fichiers sources au lieu de faire appel aux fichiers . h j´inclus les fichiers . c

ça marche impec mais ce n´est pas comme ça qu´il faut faire ( sinon les fichiers . h ne servent a rien)
quand j´inclus un fichier . h et que je compile ce dernier est ignoré et le compilo ne trouve pas les fonctions qui y sont definies.
alors que si j´inclus les fichiers . c ça marche.
? ??
( j´ai verifié et j´ai bien le meme type de syntaxe que pour l´inclusion de NGCK.h dans les projet que tu distribues dans le topic methode d´aprentissage)

je me suis renseigné a la fac cet après midi et un gars m´a dit qu´il avait le meme prob chez lui sur dev-cpp et que pour inclure des fichiers . h il fallait faire un " projet" avec dev-cpp. mais que sous linux ce n´était pas necessaire.

exemple pour ( un poil) plus de clareté:
la fct multiplication et contenue et define dans operation.c

fichier principal:

======

  1. include < stdio.h>
  2. include " operation.h"

int main()
{
int x;
x=multiplication(5,7);
printf("%d\n",x);
return 0;
}
================
ceci ne fonctionne pas
et renvoi comme erreur :
multiplication est inconnu

autre version ( qui fonctionne)
================

  1. include < stdio.h>
  2. include " operation.c"

int main()
{
int x;
x=multiplication(5,7);
printf("%d\n",x);
return 0;
}
==============

je ne comprend pas pourquoi ça ne fonctionne pas alors que les fichiers operation.c et operation.h
sont correctements ecrits
je pense que c´est le meme genre d´erreur lors de l´execution du makefile.
je vais essayer tout ça sous linux demain a la fac.
merci de ta reponse.

Lapintade
Lapintade
Niveau 30
10 mai 2005 à 23:46:32

Ton fichier . h ne doit pas etre correct. Il doit contenir le prototype de ta fonction multiplication, qui doit etre :

int mutltiplication(int a, int b);

c´est tout.

En incluant le fichier . c, la fonction devient bien definie, mais tu auras normallement une erreur de link, car ta fonction existera dans 2 fichiers . o differents.

guyver2
guyver2
Niveau 10
11 mai 2005 à 00:13:25

non non mon fichiers . h est correct.

je vien de mettre tous mes fichiers sources ( sans les modifier) dans un projet dev-cpp et là . ... par le truchement de l´informatique pas de pb de compilation les lien se font de maniere correcte.

donc je vais continuer de suivre les conseils reçu a la fac en esperant que tout fonnctionne aussi bien sur les ordis de la fac. ( sous linux)
car je me vois mal rendre à mes profs un fichier projet dev-cpp.

y a t´il une explication pour le fait que dev-cpp compile correctement si c´est un projet complet et mal si c´est juste une liste de fichier . c

guyver2
guyver2
Niveau 10
11 mai 2005 à 10:35:16

bon ce n´est plus la peine de me répondre j´ai fini par trouver une solution a mon pb en analysant le makefile produit par le projet dev-cpp
j´ai ensuite retapé mon propre makefile et un poil retouché mes fichiers sources ( surtout pour inclure < stdio.h> et < stdlib.h> partout)
et TADAAAAA ça marche impec ( et le tout avec une ecriture qui plaira aux profs....)

bon ben vu que ce topic ne me sert plus et que personne d´autre y venait tu peux le supprimer.

encore merci de ton aide.

Lapintade
Lapintade
Niveau 30
11 mai 2005 à 11:05:12

Ben pourquoi ne pas mettre ici ton makefile final ? Ca pourra toujours aider un gars qui a le meme probleme que toi.

guyver2
guyver2
Niveau 10
11 mai 2005 à 15:27:40

ok le voila.

    1. ###################

calculatrice:calculatrice.o eval.o operation.o pile.o
_ gcc calculatrice.o eval.o operation.o pile.o -lm -o calculatrice

calculatrice.o: calculatrice.c
_ gcc -c calculatrice.c -o calculatrice.o

eval.o: eval.c
_ gcc -c eval.c -o eval.o

operation.o: operation.c
_ gcc -lm -c operation.c -o operation.o

pile.o: pile.c
_ gcc -c pile.c -o pile.o

clean :
_ rm -f calculatrice calculatrice.o eval.o operation.o pile.o

en fait en le relisant je me demande pourquoi j´ai pas réussi a l´ecrire du prmeir coup ( a moins que ce soit les 2-3 changement que j´ai fais sur les sources qui font que ça fonctionne???)
le mystère reste entier.

guyver2
guyver2
Niveau 10
11 mai 2005 à 16:59:07

et vu que le makefile seule ne sert a rien je vous donne tous les fichiers necéssaires.
http://www.info.univ-angers.fr/pub/letouzey/C/
voila une belle page qui va rebuter tt le monde.

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de Jeux
  • Programmation
  • Création de sites web
  • Linux
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment