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 ${1})*.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))
Usage
Building from Individual Projektverzeichnisse
[project_directory]$ ln -s ../project.mk Makefile # create a symlink [project_directory]$ make
Erstellen aus dem Top-Level-Verzeichnis
[all_lessons]$ make
Bereinigung einzelner Projektverzeichnisse
[project_directory]$ cd .. [all_lessons]$ make clean
Reinigung aller Projekte
[all_lessons]$ make clean
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3