Ausführbare Dateien mit ähnlichen Regeln mit GNU Make erstellen
Als Alternative zu Scons kann GNU Make eine effiziente Lösung für Ihre Aufgabe sein. Mit GNU Make können Sie einen flexiblen Build-Prozess durch sein Abhängigkeitsauflösungssystem definieren.
GNU Make-Ansatz
Wir stellen zwei Makefiles vor, die das Erstellen und Bereinigen von beiden Seiten aus ermöglichen -Ebenenverzeichnis (all_lessons) und einzelne Projektverzeichnisse:
project.mk
all : % : forward_ # build any target by forwarding to the main makefile $(MAKE) -C .. project_dirs=$(notdir ${CURDIR}) $@ .PHONY : forward_
Makefile
# one directory per project, one executable per directory project_dirs := $(shell find * -maxdepth 0 -type d ) # executables are named after its directory and go into the same directory exes := $(foreach dir,${project_dirs},${dir}/${dir}) all : ${exes} # the rules .SECONDEXPANSION: objects = $(patsubst %.cpp,%.o,$(wildcard $(dir )*.cpp)) # link ${exes} : % : $$(call objects,$$*) Makefile g++ -o $@ $(filter-out Makefile,$^) ${LDFLAGS} ${LDLIBS} # compile .o and generate dependencies %.o : %.cpp Makefile g++ -c -o $@ -Wall -Wextra ${CPPFLAGS} ${CXXFLAGS} -MD -MP -MF ${@:.o=.d} $< .PHONY: clean clean : rm -f $(foreach exe,${exes},$(call objects,${exe})) $(foreach dir,${project_dirs},$(wildcard ${dir}/*.d)) ${exes} # include auto-generated dependency files -include $(foreach dir,${project_dirs},$(wildcard ${dir}/*.d))
Vorteile
Verwendung
Zum Erstellen aus einer Einzelperson Erstellen Sie im Projektverzeichnis einen symbolischen Link zu project.mk als Makefile in diesem Verzeichnis. Beim Erstellen oder Bereinigen aus dem Verzeichnis „all_lessons“ werden alle Projekte verarbeitet, während sich das Erstellen oder Bereinigen aus dem Verzeichnis eines Projekts nur auf dieses Projekt auswirkt.
Dieser Ansatz bietet eine saubere und flexible Möglichkeit, mehrere ausführbare Dateien mit ähnlichen Regeln aus verschiedenen Verzeichnissen zu erstellen.
Das obige ist der detaillierte Inhalt vonWie kann GNU Make verwendet werden, um mehrere ausführbare Dateien mit ähnlichen Regeln aus verschiedenen Verzeichnissen effizient zu erstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!