Maison >développement back-end >C++ >Comment GNU Make peut-il être utilisé pour créer efficacement plusieurs exécutables avec des règles similaires provenant de différents répertoires ?
Créer des exécutables avec des règles similaires à l'aide de GNU Make
Comme alternative à Scons, GNU Make peut être une solution efficace pour votre tâche. GNU Make vous permet de définir un processus de construction flexible grâce à son système de résolution de dépendances.
Approche GNU Make
Nous présentons deux makefiles qui permettent la construction et le nettoyage depuis le haut. -répertoire de niveau (all_lessons) et répertoires de projets individuels :
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))
Avantages
Utilisation
Pour créer à partir d'un individu répertoire du projet, créez un lien symbolique vers project.mk en tant que Makefile dans ce répertoire. La construction ou le nettoyage à partir du répertoire all_lessons traitera tous les projets, tandis que le faire à partir du répertoire d'un projet n'affectera que ce projet.
Cette approche offre un moyen propre et flexible de créer plusieurs exécutables avec des règles similaires à partir de différents répertoires.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!