Construindo vários executáveis com regras semelhantes usando GNU Make
Embora o Scons seja uma ferramenta de construção capaz, implementar a funcionalidade desejada pode ser um desafio. Uma abordagem mais direta é utilizar o GNU Make, que permite fácil construção e limpeza de diretórios de projetos individuais e de nível superior.
Configuração do Makefile
Os makefiles fornecidos habilite a construção e limpeza do diretório all_lessons e dos diretórios de projetos individuais. O executável de cada projeto recebe o nome de seu diretório.
Estrutura do projeto
Para conseguir isso, você precisará configurar uma estrutura de projeto semelhante ao exemplo fornecido:
all_lessons/ helloworld/ lesson.cpp main.cpp even_or_odd/ lesson.cpp main.cpp calculator/ lesson.cpp user_created_add.cpp main.cpp
Conteúdo do 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 ${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
Construindo a partir de indivíduo Diretórios do projeto
[project_directory]$ ln -s ../project.mk Makefile # create a symlink [project_directory]$ make
Construindo a partir do diretório de nível superior
[all_lessons]$ make
Limpando diretórios de projetos individuais
[project_directory]$ cd .. [all_lessons]$ make clean
Limpando todos os projetos
[all_lessons]$ make clean
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3