Ich habe eine Binärdatei, die ich mehrmals mit verschiedenen Compiler-Flags erstellen muss. Daher habe ich ein Makefile, die so etwas wie heißt es:Makefile mehrere Ziele aus der gleichen Quelldatei, mit verschiedenen Flags
OBJECTS_A := $(addprefix $(OBJFOLDER)/, $(SOURCES:.cpp=.a.o))
OBJECTS_B := $(addprefix $(OBJFOLDER)/, $(SOURCES:.cpp=.b.o))
OBJECTS_C := $(addprefix $(OBJFOLDER)/, $(SOURCES:.cpp=.c.o))
Ich sehe auch eine Regel die Flags für jede OBJECTS_x zu ändern:
$(OBJECTS_B): DEFINES+=-D_B
$(OBJECTS_C): DEFINES+=-D_C
Und das ist, wo das Problem auftritt: Wenn ich den Zustand Ziele separat, wie:
$(OBJFOLDER)/%.a.o: %.cpp
$(COMPILER) $(CFLAGS) $(INCFOLDER) $(DEFINES) -c $< -o [email protected]
$(OBJFOLDER)/%.b.o: %.cpp
$(COMPILER) $(CFLAGS) $(INCFOLDER) $(DEFINES) -c $< -o [email protected]
$(OBJFOLDER)/%.c.o: %.cpp
$(COMPILER) $(CFLAGS) $(INCFOLDER) $(DEFINES) -c $< -o [email protected]
Alle funktioniert. wenn ich alle Regeln in einer jedoch verschmelzen, wird nur die erste ausgewertet:
$(OBJFOLDER)/%.a.o $(OBJFOLDER)/%.b.o $(OBJFOLDER)/%.c.o: %.cpp
$(COMPILER) $(CFLAGS) $(INCFOLDER) $(DEFINES) -c $< -o [email protected]
Was ich auf Trockenlauf bekommen ist, dass nur $ (ObjFolder) /% ao Objekte bauen, sondern auf der Verknüpfungsregel. Jede Binärdatei benötigt ihre Objekte (und B- und C-Binärdateien können daher nicht bauen).
Irgendwelche Ideen? Vielen Dank!
Ein Muster Regel mit mehreren Mustern Ziel bedeutet, genau so, wie Sie erlebt haben: es ist ein einziger Aufruf des Rezeptes erwartet _all_ die Ziele zu bauen . Es wird verwendet, wenn ein Programm mehrere Ausgabedateien erstellt. Siehe https://www.gnu.org/software/make/manual/html_node/Pattern-Intro.html (letzter Absatz) – MadScientist