Creación de varios ejecutables con reglas similares utilizando GNU Make
Si bien Scons es una herramienta de compilación capaz, implementar la funcionalidad deseada puede ser un desafío. Un enfoque más sencillo es utilizar GNU Make, que permite crear y limpiar fácilmente desde directorios de proyectos individuales y de nivel superior.
Configuración de Makefile
Los archivos Make proporcionados habilite la creación y limpieza tanto desde el directorio all_lessons como desde los directorios de proyectos individuales. El ejecutable de cada proyecto lleva el nombre de su directorio.
Estructura del proyecto
Para lograr esto, deberá configurar una estructura de proyecto similar al ejemplo proporcionado:
all_lessons/ helloworld/ lesson.cpp main.cpp even_or_odd/ lesson.cpp main.cpp calculator/ lesson.cpp user_created_add.cpp main.cpp
Contenido del archivo Make
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))
Uso
Construcción desde individuo Directorios de proyectos
[project_directory]$ ln -s ../project.mk Makefile # create a symlink [project_directory]$ make
Construyendo desde el directorio de nivel superior
[all_lessons]$ make
Limpiando directorios de proyectos individuales
[project_directory]$ cd .. [all_lessons]$ make clean
Limpiar todos los proyectos
[all_lessons]$ make clean
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3