Создание нескольких исполняемых файлов по схожим правилам с использованием GNU Make
Хотя Scons является мощным инструментом сборки, реализация желаемой функциональности может оказаться сложной задачей. Более простой подход — использовать GNU Make, который позволяет легко создавать и очищать как каталоги верхнего уровня, так и отдельные каталоги проектов.
Настройка Makefile
Предоставленные файлы makefile включить сборку и очистку как из каталога all_lessons, так и из каталогов отдельных проектов. Исполняемый файл каждого проекта назван в честь его каталога.
Структура проекта
Чтобы добиться этого, вам необходимо настроить структуру проекта, аналогичную приведенному примеру:
all_lessons/ helloworld/ lesson.cpp main.cpp even_or_odd/ lesson.cpp main.cpp calculator/ lesson.cpp user_created_add.cpp main.cpp
Содержимое 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))
Использование
Создание на основе индивидуального Каталоги проектов
[project_directory]$ ln -s ../project.mk Makefile # create a symlink [project_directory]$ make
Создание из каталога верхнего уровня
[all_lessons]$ make
Очистка отдельных каталогов проектов
[project_directory]$ cd .. [all_lessons]$ make clean
Очистка всех проектов
[all_lessons]$ make clean
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3