Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 10/06/2008, à 16:02

nizam

[Résolu] Commande non exécutée dans un makefile

Je me suis lancé dans la création d'un makefile sous linux pour compiler mes programmes (simples) en C++. Je suis parti d'un makefile q'un pote à trouvé sur le net mais étant complisqué, je veux le simplifier mais j'ai un souci. A la fin du makefile, je veux supprimer les fichiers objets ".o" qui ont été générés mais la commande ne s'exécute pas.

Voici mon makefile en entier:

# Makefile by nizam

EXECUTABLE := Programme
CPP         := g++
OPT_COMPIL := -c 
OPT_BUILD  := -o
CXXFLAGS   :=
LIBS       :=

SUFFIXE_HEADER := h
SUFFIXE_FILE   := cpp
SUFFIXE_OBJECT := o

HEADERS    := $(wildcard *.$(SUFFIXE_HEADER))
FILES      := $(wildcard *.$(SUFFIXE_FILE))
OBJECTS    := $(patsubst %.$(SUFFIXE_FILE),%.$(SUFFIXE_OBJECT),$(wildcard *.$(SUFFIXE_FILE)))

#.SILENT:

# Cible par defaut
all: $(EXECUTABLE)

# Compilation des objets
.$(SUFFIXE_FILE).$(SUFFIXE_OBJECT):$?
	@printf ' 	CPP  %-24s => %s\n' $< $@
	@$(CPP) $(OPT_COMPIL) $(CXXFLAGS) $<

# Construction de l'executable
$(EXECUTABLE): $(OBJECTS)
	@$(CPP) $(CXXFLAGS) $(OPT_BUILD) $(EXECUTABLE) $(OBJECTS) $(LIBS)
	@echo "	$(EXECUTABLE) correctement compiler"
	
# Suppression des fichiers objets
.PHONY: clean mrproper

clean:
	@echo "	Suppression des fichiers objets"
	-rm -f *.o

mrproper: clean
	rm -rf $(EXECUTABLE)

Rien ne s'exécute à partir de la ligne .PHONY: clean mrproper.
D'où ma question: pourquoi? et comment résoudre ce problème.

PS à quoi sert la ligne .SILENT que j'ai mis en commentaire et qui n'a rien changer?

Dernière modification par nizam (Le 11/06/2008, à 10:46)

Hors ligne

#2 Le 10/06/2008, à 16:40

yohann

Re : [Résolu] Commande non exécutée dans un makefile

salut

pourquoi c'est des := au lieu des =?
la regle mrproper ne semble pas exister
fait attention au espaces qui trainent, les makefile aime pas trop en général
astuce emacs: ctrl+s puis esapace

sinon ton makefile fait un peu penser a
alias make='g++ *.cpp' qd meme mais bon


j.vachez, le génie du net | Soirées jeux sur Lyon | 441
++++++++++[>+++++++>++++++++++>+++<<<-]>++.>+.+++++++
..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.

Hors ligne

#3 Le 10/06/2008, à 17:08

nizam

Re : [Résolu] Commande non exécutée dans un makefile

yohann a écrit :

pourquoi c'est des := au lieu des =?

C'est ce qu'il y avait dans le fichier que l'ont m'a donné.

yohann a écrit :

la regle mrproper ne semble pas exister

Comment ça? tu ne l'a jamais rencontrée ou je l'ai mal écrite?

yohann a écrit :

fait attention au espaces qui trainent, les makefile aime pas trop en général

j'ai vérifié, après la ligne [@echo "    $(EXECUTABLE) correctement compiler"], j'ai supprimé tous les espaces et ça ne fonctionne toujours pas.

Hors ligne

#4 Le 10/06/2008, à 17:31

yohann

Re : [Résolu] Commande non exécutée dans un makefile

c'est surtout que je l'avais pas vu hmm

sinon clean depend de mrproper donc je pense que c'est inutilie de specifier que .PHONY depend de clean

puisque make va evaluer .PHONY => evaluer mrproper =>evaluer clean => executer clean => executer mrproper => executer .PONY

je sais pas si le pb vient de la, mais en tout cas c'est inutile de le mettre

sinon ca a l'air correct, bonne chance

PS:
http://www2.lifl.fr/~ryl/ens/doc/make.html

Dernière modification par yohann (Le 10/06/2008, à 17:33)


j.vachez, le génie du net | Soirées jeux sur Lyon | 441
++++++++++[>+++++++>++++++++++>+++<<<-]>++.>+.+++++++
..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.

Hors ligne

#5 Le 11/06/2008, à 10:45

nizam

Re : [Résolu] Commande non exécutée dans un makefile

C'est bon un pote a réussi à résoudre mon problème. Je ne sais pas d'où ça venais mais le principal est que ça fonctionne maintenant.
je vous met quand même le makefile final au cas où d'autres auraient le même soucis.

#Makefile by nizam"

EXECUTABLE := Programme
CPP         := g++
OPT_COMPIL := -c
OPT_BUILD  := -o
CXXFLAGS   :=
LIBS       :=

SUFFIXE_HEADER := h
SUFFIXE_FILE   := cpp
SUFFIXE_OBJECT := o

HEADERS    := $(wildcard *.$(SUFFIXE_HEADER))
FILES      := $(wildcard *.$(SUFFIXE_FILE))
OBJECTS    := $(patsubst %.$(SUFFIXE_FILE),%.$(SUFFIXE_OBJECT),$(wildcard *.$(SUFFIXE_FILE)))

#.SILENT:

# Cible par defaut
all: $(EXECUTABLE)

# Compilation des objets
.$(SUFFIXE_FILE).$(SUFFIXE_OBJECT):$?
	@printf '    CPP  %-24s => %s\n' $< $@
	@$(CPP) $(OPT_COMPIL) $(CXXFLAGS) $<

# Construction de l'executable
$(EXECUTABLE): $(OBJECTS)
	@$(CPP) $(CXXFLAGS) $(OPT_BUILD) $(EXECUTABLE) $(OBJECTS) $(LIBS)
	@echo "   $(EXECUTABLE) correctement compiler"
   
# Suppression des fichiers objets
	@rm -f *.o
	@echo "   Suppression des fichiers objets"

Hors ligne