Heim >Backend-Entwicklung >C++ >Kann GNU Make die Erstellung zahlreicher ausführbarer Dateien mit ähnlichen Regeln in einer Verzeichnisstruktur rationalisieren und die Kompilierung sowohl aus dem Hauptverzeichnis als auch aus einzelnen Projektordnern ermöglichen?
Erstellen mehrerer ausführbarer Dateien mit ähnlichen Regeln mit GNU Make
Frage:
Kann GNU Make das Erstellen mehrerer ausführbarer Dateien mit ähnlichen Regeln in einer Verzeichnisstruktur erleichtern und die Kompilierung sowohl aus dem Hauptverzeichnis als auch aus einzelnen Projektverzeichnissen ermöglichen?
Antwort:
Ja, GNU Make kann damit umgehen Bewältigen Sie diese Aufgabe mit einem prägnanten und effizienten Ansatz. Nachfolgend finden Sie zwei Makefiles, die die gewünschte Funktionalität implementieren:
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))
Verwendung:
Vorteile:
Das obige ist der detaillierte Inhalt vonKann GNU Make die Erstellung zahlreicher ausführbarer Dateien mit ähnlichen Regeln in einer Verzeichnisstruktur rationalisieren und die Kompilierung sowohl aus dem Hauptverzeichnis als auch aus einzelnen Projektordnern ermöglichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!