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?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage