2016-07-27 16 views
0

Mein Makefile ist unten, ich habe die .d-Dateien für automatische Abhängigkeiten verwendet, aber es funktioniert nicht, wenn ich nur einige .h-Dateien geändert habe, ist seltsam, aber warum .. dank für SieWarum meine Makefile-Abhängigkeiten nicht funktionieren

PROGRAM := a.out 
SRCDIRS := ./src/access 
INCLUDE := -I./include/access 
SRCEXTS := .cpp 
CPPFLAGS := -g -Wall 
LDFLAGS := 

CXX  = g++ 
RM  = rm -f 

SHELL = /bin/sh 
SOURCES = $(foreach d,$(SRCDIRS),$(wildcard $(addprefix $(d)/*,$(SRCEXTS)))) 
OBJS = $(foreach x,$(SRCEXTS), \ 
     $(patsubst %$(x),%.o,$(filter %$(x),$(SOURCES)))) 
DEPS = $(patsubst %.o,%.d,$(OBJS)) 
.PHONY : all objs clean cleanall rebuild 
all : $(PROGRAM) 


objs : $(OBJS) 
%.o : %.cpp 
    $(CXX) -c $(CPPFLAGS) $< -o [email protected] $(INCLUDE) 

$(PROGRAM) : $(OBJS) 
    $(CXX) -o $(PROGRAM) $(OBJS) $(LDFLAGS) 
rebuild: clean all 
clean : 
    @$(RM) $(OBJS) $(DEPS) 
cleanall: clean 
    @$(RM) $(PROGRAM) 

-include $(DEPS) 
%.d : %.cpp 
    rm -f [email protected]; $(CXX) -MM $< $(INCLUDE) > [email protected]$$$$; \ 
    sed 's,\($*\)\.o[ :]*,\1.o [email protected] : ,g' < [email protected]$$$$ > [email protected]; \ 
    rm -f [email protected]$$$$ 
+0

Stoppen Sie mit alten Abhängigkeitsgenerierungscode, GCC hatte Flags wie [MMD' und 'MP'] (http://make.mad-scientist.net/papers/advanced-auto-dependency-generation/) für über 15 Jahre – user657267

Antwort

0

es gibt nichts helfen, die das %.d Muster verursacht zu laufen, weil %.o nicht darauf abhängt. Also, per Ihre makefile, Make einfach verwendet, welche $(DEPS) Dateien bereits auf der Festplatte vorhanden waren.

Mit den Abhängigkeiten, die Sie deklariert haben, würde die %.d Datei nur neu generiert werden, wenn etwas, das davon abhängig war, es benötigt, und die entsprechende %.cpp Datei wurde geändert.

%.d den %.o Abhängigkeiten Hinzufügen sollte die erforderliche Abhängigkeit hinzufügen, obwohl Sie noch -include, bevor Sie irgendwie, dass %.d läuft, um sicherzustellen, benötigen.

Idealerweise jeder %.d Datei sollte davon abhängen, was auch immer %.h Dateien die entsprechenden %.cpp Datei abhängt, aber die übliche Lösung für das Huhn-und-Ei-Problem ist zu zwingen, den Wiederaufbau der %.d Dateien öfter als unbedingt notwendig.

+0

Weitere Informationen zum Thema finden Sie z http://stackoverflow.com/questions/297514/how-can-i-have-a-makefile-automatical-rebuild-source-files-that-include-a-modi – tripleee

Verwandte Themen