makefile automatische Erkennung von src-Dateien und Generierung von Abhängigkeiten
Ich habe das folgende Setup für mein C ++ - Projekt:
im src-ordner gibt es * .cpp und entsprechende * .h dateien und in den obj-ordnern möchte ich meine .o-dateien haben.
Bisher ist das Kompilieren und Verknüpfen nicht das Problem. Aber jetzt habe ich zu viele .cpp- und .h-Dateien, um sie manuell in das Makefile zu kopieren. Also habe ich beschlossen, diese kleine Anweisung in das Makefile zu schreiben:
<code>collect_sources: @echo "collecting source files"; @echo "SRCS = \\" > sources; @for file in ./src/*.cpp; \ do \ echo "$$file \\" >> sources; \ done </code>
Ich auch
<code>-include sources </code>
am Anfang des Makefiles
Die resultierende Dateisources
sieht gut aus, obwohl es einen Backslash in der letzten Zeile gibt, den ich nicht mag. Aber afaik sollte es auch schädlich sein.
Ich muss jetzt auch automatisch Abhängigkeiten aufbauen. In meiner letzten Version, in der ich die * .cpp-Dateien als definiert habeSRCS
direkt im Makefile war der folgende Code gut:
<code>$(SRCDIR)/%.cpp: @$(CXX) $(DEPFLAGS) -MT \ "$(subst $(SRCDIR),$(OBJDIR),$(subst $(EXT_SRC),$(EXT_OBJ),$$file))" \ $(addprefix ,$$file) >> $(DEP); clear_dependencies: echo "" > $(DEP); depend: clear_dependencies $(SRCS) </code>
Aber mit dem Einbeziehen dersources
-file, erreicht nie den oberen Codeblock.
Hier sind die oben im Makefile definierten Konstanten:
<code>CXX = g++ CXXFLAGS = -Wall \ -Wextra \ -Wuninitialized \ -Wmissing-declarations \ -pedantic \ -O3 \ -p -g -pg LDFLAGS = -p -g -pg DEPFLAGS = -MM SRCDIR = ./src OBJDIR = ./obj TARGET = ./bin/my_funky_function_which_is_not_the_real_name -include sources OBJSTMP = $(SRCS:.cpp=.o) OBJS = $(OBJSTMP:$(SRCDIR)=$(OBJDIR)) DEP = depend.main EXT_SRC = .cpp EXT_OBJ = .o </code>
Was vermisse ich? Ist mein Ansatz gültig / machbar?