Heim >Backend-Entwicklung >C++ >Wie erstellt man mit GNU Make mehrere ausführbare Dateien mit ähnlichen Regeln?
Erstellen mehrerer ausführbarer Dateien mit ähnlichen Regeln mit GNU Make
Scons ist zwar ein leistungsfähiges Build-Tool, die Implementierung der gewünschten Funktionalität kann jedoch eine Herausforderung sein. Ein einfacherer Ansatz ist die Verwendung von GNU Make, das ein einfaches Erstellen und Bereinigen sowohl aus der obersten Ebene als auch aus einzelnen Projektverzeichnissen ermöglicht.
Makefile-Setup
Die bereitgestellten Makefiles Ermöglichen Sie das Erstellen und Bereinigen sowohl aus dem Verzeichnis all_lessons als auch aus einzelnen Projektverzeichnissen. Die ausführbare Datei jedes Projekts ist nach ihrem Verzeichnis benannt.
Projektstruktur
Um dies zu erreichen, müssen Sie eine Projektstruktur ähnlich dem bereitgestellten Beispiel einrichten:
all_lessons/ helloworld/ lesson.cpp main.cpp even_or_odd/ lesson.cpp main.cpp calculator/ lesson.cpp user_created_add.cpp main.cpp
Makefile-Inhalte
project.mk
all : % : forward_ # build any target by forwarding to the main makefile $(MAKE) -C .. project_dirs=$(notdir ${CURDIR}) $@ .PHONY : forward_
Makefile
# project configuration project_dirs := $(shell find * -maxdepth 0 -type d ) exes := $(foreach dir,${project_dirs},${dir}/${dir}) all : ${exes} # 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 dependency files -include $(foreach dir,${project_dirs},$(wildcard ${dir}/*.d))
Verwendung
Erstellen aus einzelnen Projektverzeichnissen
[project_directory]$ ln -s ../project.mk Makefile # create a symlink [project_directory]$ make
Erstellen aus dem Top-Level-Verzeichnis
[all_lessons]$ make
Einzelne Projektverzeichnisse bereinigen
[project_directory]$ cd .. [all_lessons]$ make clean
Alle Projekte bereinigen
[all_lessons]$ make clean
Das obige ist der detaillierte Inhalt vonWie erstellt man mit GNU Make mehrere ausführbare Dateien mit ähnlichen Regeln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!