Mon makefile marche et ç'est étonnant !

Mon makefile marche et ç'est étonnant ! - C++ - Programmation

Marsh Posté le 21-10-2004 à 17:18:22    

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 ?

Reply

Marsh Posté le 21-10-2004 à 17:18:22   

Reply

Marsh Posté le 21-10-2004 à 17:24:00    

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
Reply

Marsh Posté le 22-10-2004 à 14:37:43    

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'.

Reply

Marsh Posté le 19-02-2005 à 19:14:26    

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 ?

Reply

Marsh Posté le 19-02-2005 à 20:26:04    

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

Reply

Marsh Posté le 21-02-2005 à 08:27:46    

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.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed