2010-05-05 3 views
6

Ich habe mehrere C- und C++ - Projekte, die alle einer Grundstruktur folgen, die ich schon seit einiger Zeit verwende. Meine Quelldateien gehen in src/*.c, Zwischendateien in obj/*.[do] und die tatsächliche ausführbare Datei in dem Verzeichnis der obersten Ebene.Makefile-Abhängigkeitsgenerierung für bestimmte Ziele überspringen (z. B. `clean`)

folgt Mein Makefiles in etwa dieser Vorlage:

# 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) 

nun an dem Punkt, ich bin, wo ich dies ein Debian-System für die Verpackung. Ich verwende debuild, um das Debian-Quellpaket zu erstellen, und pbuilder, um das Binärpaket zu erstellen. Der Schritt debuild muss nur das Ziel clean ausführen, aber selbst dies führt dazu, dass die Abhängigkeitsdateien generiert und eingefügt werden.

Kurz gesagt, meine Frage ist wirklich: Kann ich irgendwie verhindern, dass Abhängigkeiten zu erzeugen, wenn alles, was ich will, das clean Ziel ist?

Antwort

8

Die Lösung ist einfach, sie erzeugt nicht -include Dateien unter Rein:

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