Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1563 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Mon makefile marche et ç'est étonnant !

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Mon makefile marche et ç'est étonnant !

n°879238
nathan_g
Posté le 21-10-2004 à 17:18:22  profilanswer
 

Re-Bonjour,
 
Je progresse dans ma découverte des makefile et je suis parvenu à l'écriture de ce fichier :
 
CPP = g++
CPPFLAGS = -ansi -pedantic
 
EXEC = main
SRC=$(wildcard *.C)
OBJ=$(SRC:.C=.o)
 
main:   $(OBJ)
  $(CPP) -o $@ $^
 
Je me suis placé dans un répertoire contenant juste un fichier main.C. Bizarrement, ce makefile fonctionne alors qu'il ne devrait pas. En effet, aucune ligne ne précise comment créer le fichier main.o.
En fait, au lancement, la commande
 
g++ -ansi -pedantic -c -o main.o main.C
 
s'éxécute et crée le fichier main.o, avant l'édition de lien.
 
Pourquoi cette commande se lance t'elle alors qu'elle n'est pas donnée dans le makefile ?
 
D'autre part, si je rajoute une ligne pour créer main.o du type :
 
%.o:   %.C
  $(CPP) -O -o $@ -c $^
 
elle ne s'éxécute pas et la création du fichier main.o se fait de manière identique par :
 
g++ -ansi -pedantic -c -o main.o main.C
 
Comment forcer la création du fichier main.o par ces deux lignes suppléméntaires dans mon makefile ?

mood
Publicité
Posté le 21-10-2004 à 17:18:22  profilanswer
 

n°879248
Lam's
Profil: bas.
Posté le 21-10-2004 à 17:24:00  profilanswer
 

Code :
  1. .C.o:
  2.  $(CPP) -O -o $@ -c $<


 
D'autre part, gnu make a des règles implicites pour automatiquement compiler les fichiers C et C++ en utilisant les flags que tu as positionné:
http://www.gnu.org/software/make/m [...] tml#SEC105


Message édité par Lam's le 21-10-2004 à 17:24:53
n°880040
leto78
Posté le 22-10-2004 à 14:37:43  profilanswer
 

Je rejoins Lam's sur le fait qu'il existe des régles inplicites donc c'est normal que le Makefile marche.
 
Par contre, la première régle donnée :
 

Code :
  1. %.o: %.C
  2. <tab> $(CPP) $(CPPFLAGS) -o $@ -c $^


 
est à privilègier sur celle de Lam's, il me semble, car elle correspond à la nouvelle notation des patterns de make.
 
La deuxième donc est tolérée par compatibilité mais doit devenir obsoléte.
 


"Suffix rules" are the old-fashioned way of defining implicit rules
for `make'.  Suffix rules are obsolete because pattern rules are more
general and clearer.  They are supported in GNU `make' for
compatibility with old makefiles.  They come in two kinds:
"double-suffix" and "single-suffix".
 
   A double-suffix rule is defined by a pair of suffixes: the target
suffix and the source suffix.  It matches any file whose name ends with
the target suffix.  The corresponding implicit prerequisite is made by
replacing the target suffix with the source suffix in the file name.  A
two-suffix rule whose target and source suffixes are `.o' and `.c' is
equivalent to the pattern rule `%.o : %.c'.
 
   A single-suffix rule is defined by a single suffix, which is the
source suffix.  It matches any file name, and the corresponding implicit
prerequisite name is made by appending the source suffix.  A
single-suffix rule whose source suffix is `.c' is equivalent to the
pattern rule `% : %.c'.

n°987200
jjgan
...
Posté le 19-02-2005 à 19:14:26  profilanswer
 

comment dans un makefile cacher les commandes exectuté ?
 
j'ai :
 
clean:
    rm -f *.o
    echo "Fichiers objets effacés"
    rm -f prog
 
et c m affiche tout (les commandes et les résultats)
comment avoir que les résultats ?

n°987241
Lam's
Profil: bas.
Posté le 19-02-2005 à 20:26:04  profilanswer
 

Bonjour,
S'il te plait:
http://www.gnu.org/software/make/m [...] html#SEC53
 
Merci.
Au revoir.
 

n°988036
nathan_g
Posté le 21-02-2005 à 08:27:46  profilanswer
 

Purée, un de mes anciens post qui ressort !
 
Je pense que Lam's t'a fait la même réponse que celle j'écrit, cad de rajouter un " @ " devant tes lignes pour éviter que les instructions ne s'affichent lorsqu'elles seront lancées.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Mon makefile marche et ç'est étonnant !

 

Sujets relatifs
[C] problem de makefileCa marche sur Firefox et pas sur IE !
Croisement de Headers, comment ça marche? [Résolu]Makefile et ncurses
Est ce normal que la fonction rmdir() ne marche pas chez free ?Java(script ?) d'une page qui ne marche pas sur l'ordi, OK sur le web
[Delphi] ShellExecute() qui marche pas.Programmation Palm / Ti-82 simple, comment ça marche ??
mon petit prog en PASCAL marche pas mais je vois pa l'erreur....HELP 
Plus de sujets relatifs à : Mon makefile marche et ç'est étonnant !


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR