2010-06-21 2 views
0

J'essaye d'exécuter une seule cible appelant "make cleanlists". Cette cible n'a pas de prérequis et devrait être exécutée (à ma connaissance) immédiatement sans toucher à d'autres règles.Forcer GNU make à exécuter une cible spécifique

.PHONY: cleanlists 
cleanlists: 
    @echo cleaning source and header lists .. 
    @rm -f sourcelist.mk 
    @rm -f headerlist.mk 
    @echo done. 

Mais dans le cas, que ces deux fichiers ne sont vérifiés et finalement conduire à la régénération d'entre eux existent pas, d'autres règles ayant ces fichiers en tant que conditions préalables avant d'exécuter la cible « » listes de nettoyage.

Existe-t-il un moyen simple de forcer make pour éviter ce comportement?

Merci

+0

Je ne comprends pas. Êtes-vous en train de dire que "make cleanlists" ne se contente pas de supprimer ces fichiers? –

+0

NON, make crée d'abord ces fichiers avant de les supprimer (dans le cas où ils n'existent pas lors de l'invocation make) – rainer

+0

C'est très étrange. Pourriez-vous poster tout le makefile s'il est petit, ou s'il est grand, essayez de retirer les parties jusqu'à ce que ce soit assez petit pour poster ou que le problème disparaisse soudainement (ce qui vous donnerait un grand indice). – Beta

Répondre

1

Les .mk noms de ces deux fichiers suggère que ailleurs dans votre makefile vous les incluant comme contenu de makefile à analyser et exécuté:

include sourcelist.mk 
include headerlist.mk 

Pour exécuter votre make cleanlists commande avec un fichier makefile à jour, make régénère ces fichiers et réorganise l'ensemble du fichier makefile avant de calculer les dépendances et d'exécuter les commandes, comme décrit dans How Makefiles Are Remade.

Cela n'a pas de sens pour une règle propre, mais make ne le sait pas. Vous pouvez utiliser this trick from the manual pour traiter cette règle particulière:

ifneq "$(MAKECMDGOALS)" "cleanlists" 
include sourcelist.mk 
include headerlist.mk 
endif 
+0

Merci: Cela fonctionne très bien! – rainer

Questions connexes