2010-05-05 22 views
6

J'ai plusieurs projets C et C++ qui suivent tous une structure de base que j'utilise depuis un moment. Mes fichiers source vont dans src/*.c, fichiers intermédiaires dans obj/*.[do], et l'exécutable réel dans le répertoire de premier niveau.Sauter la génération de dépendance makefile pour certaines cibles (par exemple `clean`)

Mes makefiles suivent à peu près ce modèle:

# The final executable 
TARGET := something 
# Source files (without src/) 
INPUTS := foo.c bar.c baz.c 

# OBJECTS will contain: obj/foo.o obj/bar.o obj/baz.o 
OBJECTS := $(INPUTS:%.cpp=obj/%.o) 
# DEPFILES will contain: obj/foo.d obj/bar.d obj/baz.d 
DEPFILES := $(OBJECTS:%.o=%.d) 

all: $(TARGET) 

obj/%.o: src/%.cpp 
    $(CC) $(CFLAGS) -c -o [email protected] $< 

obj/%.d: src/%.cpp 
    $(CC) $(CFLAGS) -M -MF [email protected] -MT $(@:%.d=%.o) $< 

$(TARGET): $(OBJECTS) 
    $(LD) $(LDFLAGS) -o [email protected] $(OBJECTS) 

.PHONY: clean 
clean: 
    -rm -f $(OBJECTS) $(DEPFILES) $(RPOFILES) $(TARGET) 

-include $(DEPFILES) 

Maintenant, je suis au point où je suis CONTeNANT pour un système Debian. J'utilise debuild pour construire le paquet source Debian, et pbuilder pour construire le paquet binaire. L'étape debuild doit uniquement exécuter la cible clean, mais même cela entraîne la génération et l'inclusion des fichiers de dépendance.

En bref, ma question est vraiment: Puis-je en quelque sorte empêcher faire de générer des dépendances quand tout ce que je veux est d'exécuter la cible clean?

Répondre

8

La solution est facile, ne pas -include fichiers générés sous propre:

ifneq ($(MAKECMDGOALS),clean) 
    -include $(DEPFILES) 
endif