Maison >développement back-end >C++ >Comment créer plusieurs exécutables avec des règles similaires à l'aide de GNU Make ?
Création de plusieurs exécutables avec des règles similaires à l'aide de GNU Make
Bien que Scons soit un outil de construction performant, la mise en œuvre de la fonctionnalité souhaitée peut s'avérer difficile. Une approche plus simple consiste à utiliser GNU Make, qui permet une création et un nettoyage faciles à partir des répertoires de projet de niveau supérieur et individuels.
Configuration du Makefile
Les makefiles fournis activer la construction et le nettoyage à partir du répertoire all_lessons et des répertoires de projets individuels. L'exécutable de chaque projet porte le nom de son répertoire.
Structure du projet
Pour y parvenir, vous devrez mettre en place une structure de projet similaire à l'exemple fourni :
all_lessons/ helloworld/ lesson.cpp main.cpp even_or_odd/ lesson.cpp main.cpp calculator/ lesson.cpp user_created_add.cpp main.cpp
Contenu du Makefile
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))
Utilisation
Création à partir de répertoires de projets individuels
[project_directory]$ ln -s ../project.mk Makefile # create a symlink [project_directory]$ make
Création à partir du répertoire de niveau supérieur
[all_lessons]$ make
Nettoyage des répertoires de projets individuels
[project_directory]$ cd .. [all_lessons]$ make clean
Nettoyage de tous les projets
[all_lessons]$ make clean
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!